Forerunner: Constraint-based Speculative Transaction Execution for Ethereum
Перейти к файлу
zhogu 81cef6b590
Update Introduction of Evaluation.md
2022-10-25 19:39:02 +08:00
.github .github: remove 'nonsense' from CODEOWNERS (#20329) 2019-11-19 17:13:42 +01:00
accounts accounts/abi/bind: fix destructive packing of *big.Int (#20412) 2019-12-02 10:29:25 +01:00
build build: skip go clean on PPA, messes with the module trick 2019-11-21 18:50:58 +02:00
cmd add CELA requirements 2021-09-01 21:07:05 +08:00
cmpreuse add CELA requirements 2021-09-01 21:07:05 +08:00
common add CELA requirements 2021-09-01 21:07:05 +08:00
consensus add CELA requirements 2021-09-01 21:07:05 +08:00
console all: replace passPHRASE with passWORD in user interactions (#19932) 2019-08-12 12:00:38 +03:00
contracts/checkpointoracle accounts/abi/bind: support closing a simulated backend 2019-07-31 11:35:57 +03:00
core add CELA requirements 2021-09-01 21:07:05 +08:00
crypto build: use golangci-lint (#20295) 2019-11-18 10:49:17 +02:00
docs/audits docs: add audit reports (#18996) 2019-02-06 11:47:54 +02:00
emulator add CELA requirements 2021-09-01 21:07:05 +08:00
eth add CELA requirements 2021-09-01 21:07:05 +08:00
ethclient ethclient: remove use of common.ToHex (#20326) 2019-11-19 15:53:26 +02:00
ethdb ethdb/leveldb: disable seek compaction (#20130) 2019-09-26 17:44:00 +03:00
ethstats rpc: implement websockets with github.com/gorilla/websocket (#19866) 2019-07-22 13:22:39 +03:00
evaluation Update Introduction of Evaluation.md 2022-10-25 19:39:02 +08:00
event event: remove unused field 'closed' (#20324) 2019-11-19 16:00:32 +02:00
graphql internal/ethapi: support block number or hash on state-related methods (#19491) 2019-09-26 10:47:31 +02:00
internal add CELA requirements 2021-09-01 21:07:05 +08:00
les add CELA requirements 2021-09-01 21:07:05 +08:00
light add CELA requirements 2021-09-01 21:07:05 +08:00
log log: fix staticcheck warnings (#20388) 2019-11-28 10:53:06 +01:00
metrics metrics: fix issues reported by staticcheck (#20365) 2019-11-22 16:04:35 +01:00
miner add CELA requirements 2021-09-01 21:07:05 +08:00
mobile mobile: fix CopyFile switch to package cp 2019-11-20 14:42:36 +02:00
node add CELA requirements 2021-09-01 21:07:05 +08:00
optipreplayer add CELA requirements 2021-09-01 21:07:05 +08:00
p2p add CELA requirements 2021-09-01 21:07:05 +08:00
params add CELA requirements 2021-09-01 21:07:05 +08:00
reuseverify add CELA requirements 2021-09-01 21:07:05 +08:00
rlp rlp: fix staticcheck warnings (#20368) 2019-11-25 14:41:53 +02:00
rpc rpc: remove 'exported or builtin' restriction for parameters (#20332) 2019-11-20 10:06:21 +02:00
signer tests, signer: remove staticcheck warnings (#20364) 2019-11-23 12:51:37 +01:00
swarm swarm: code cleanup, move to ethersphere/swarm (#19661) 2019-06-04 16:35:36 +03:00
tests tests, signer: remove staticcheck warnings (#20364) 2019-11-23 12:51:37 +01:00
trie add CELA requirements 2021-09-01 21:07:05 +08:00
whisper whisper/whisperv6: fix staticcheck warnings (#20328) 2019-11-19 17:14:00 +01:00
.dockerignore cmd, internal/build, docker: advertise commit date in unstable build versions (#19522) 2019-05-08 16:44:28 +03:00
.gitattributes
.gitignore fix errors 2019-12-11 13:58:36 +08:00
.gitmodules
.golangci.yml build: use golangci-lint (#20295) 2019-11-18 10:49:17 +02:00
.mailmap
.travis.yml build, travis: use ephemeral debsrc GOPATH to get mod deps 2019-11-20 14:57:33 +02:00
AUTHORS build: deduplicate same authors with different casing 2019-07-22 12:31:11 +03:00
CODE_OF_CONDUCT.md add CELA requirements 2021-09-01 21:07:05 +08:00
CONTRIBUTING.md add CELA requirements 2021-09-01 21:07:05 +08:00
COPYING
COPYING.LESSER
Dockerfile travis, Dockerfile, appveyor: bump to Go 1.13 2019-09-12 11:09:11 +03:00
Dockerfile.alltools travis, Dockerfile, appveyor: bump to Go 1.13 2019-09-12 11:09:11 +03:00
LICENSE.TXT add CELA requirements 2021-09-01 21:07:05 +08:00
Makefile build: skip go clean on PPA, messes with the module trick 2019-11-21 18:50:58 +02:00
NOTICE add header in Notice 2021-09-09 15:16:34 +08:00
README.md Update README.md 2021-09-09 16:57:09 +08:00
README_go-ethereum.md add CELA requirements 2021-09-01 21:07:05 +08:00
SECURITY.md SECURITY.md: create security policy (#19666) 2019-06-06 14:40:52 +02:00
appveyor.yml appveyor: bump to Go 1.13.4 2019-11-02 18:54:04 +11:00
circle.yml
go.mod Merged PR 94: Divide txPreplay lock 2020-06-22 07:08:05 +00:00
go.sum Merged PR 94: Divide txPreplay lock 2020-06-22 07:08:05 +00:00
interfaces.go
makegeth.bat fix errors 2019-12-11 13:58:36 +08:00
makegeth.sh Merged PR 60: emulator & emulator log generator 2020-03-23 12:49:29 +00:00

README.md

Forerunner Ethereum

This is the code for reproducing the results of the SOSP 2021 paper "Forerunner: Constraint-based Speculative Transaction Execution for Ethereum" by Yang Chen (Microsoft Research), Zhongxin Guo (Microsoft Research), Runhuai Li (Zhejiang University and Microsoft Research), Shuo Chen (Microsoft Research), Lidong Zhou (Microsoft Research), Yajin Zhou (Zhejiang University), and Xian Zhang (Microsoft Research)

How to build:

The following is building steps. Users can also reference the build method of go-ethereum(https://github.com/ethereum/go-ethereum/blob/master/README.md)

  1. Install golang : https://golang.org/doc/install (v1.13 or later)

  2. Install dependencies, including a C compiler: For ubuntu machines, you can run sudo apt-get install build-essential

  3. In the folder of source code, run make geth.

Then, you can find the binary geth in the path $projectDir/build/bin.

How to execute Forerunner Ethereum

Basically, Forerunner Ethereum is compatible with all features of go-ethereum v1.9.9, and Forerunner Ethereum can be used as the same as go-ethereum v1.9.9.

To enable features of Forerunner Ethereum mentioned in the paper and get the best performance, users just need to append a few flags to geth command line:

--preplay --cmpreuse --parallelhasher 16 --parallelbloom --no-overmatching --add-fastpath 

To log performance of tx processing in the critical path, add this flag:

--perflog 

Forerunner Ethereum has an emulation feature which can log Ethereum network workload and reproduce the workload in emulation mode.

To log Ethereum network workload, use the basic flags and :

--emulatorlogger   --emulatordir <workload dir path> 

To emulate on a given workload, use the basic flags and:

--emulatordir <workload dir path> --emulatefile <workload file name>  --emulatefrom <start blocknumber of emulation> 

Examples:

The following example command line is how we set the flags which are compatible with go-ethereum v1.9.9 in our SOSP paper for Baseline results

$projectDir/build/bin/geth --datadir <geth data dir> --datadir.ancient  <geth ancient data dir> --nousb --cache=40960  --txpool.accountslots 1024 --txpool.globalslots 8192 --txpool.accountqueue 1024 --txpool.globalqueue 4096 --perflog 

The following example command line is how we set the flags for Forerunner results in our SOSP paper.

$projectDir/build/bin/geth --datadir <geth data dir> --datadir.ancient  <geth ancient data dir> --nousb --cache=40960  --txpool.accountslots 1024 --txpool.globalslots 8192 --txpool.accountqueue 1024 --txpool.globalqueue 4096 --perflog \ 
--preplay --cmpreuse --parallelhasher 16 --parallelbloom --no-overmatching --add-fastpath 

Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.