diff --git a/Dockerfile b/Dockerfile index 63b92e082..f3b6266c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,11 +8,6 @@ FROM golang:1.22-alpine as builder RUN apk add --no-cache gcc musl-dev linux-headers git -# Get dependencies - will also be cached if we won't change go.mod/go.sum -COPY go.mod /go-ethereum/ -COPY go.sum /go-ethereum/ -RUN cd /go-ethereum && go mod download - ADD . /go-ethereum RUN cd /go-ethereum && go run build/ci.go install -static ./cmd/geth diff --git a/Dockerfile.devnode b/Dockerfile.devnode index 1d3c3a663..f65b2cbe5 100644 --- a/Dockerfile.devnode +++ b/Dockerfile.devnode @@ -1,21 +1,20 @@ ARG ZBC_VERSION=latest FROM ghcr.io/zama-ai/zama-zbc-build:${ZBC_VERSION} AS build-env +ARG TARGETARCH ARG GETH_NODE_VERSION=v1.14.3 ARG PRYSM_VERSION=v5.0.3 -ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/beacon-chain-${PRYSM_VERSION}-linux-arm64 /tmp -ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/validator-${PRYSM_VERSION}-linux-arm64 /tmp -ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/prysmctl-${PRYSM_VERSION}-linux-arm64 /tmp -RUN mv /tmp/beacon-chain-${PRYSM_VERSION}-linux-arm64 /usr/bin/prysm-beacon && chmod +x /usr/bin/prysm-beacon -RUN mv /tmp/validator-${PRYSM_VERSION}-linux-arm64 /usr/bin/prysm-validator && chmod +x /usr/bin/prysm-validator -RUN mv /tmp/prysmctl-${PRYSM_VERSION}-linux-arm64 /usr/bin/prysm-ctl && chmod +x /usr/bin/prysm-ctl +ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/beacon-chain-${PRYSM_VERSION}-linux-${TARGETARCH} /tmp +ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/validator-${PRYSM_VERSION}-linux-${TARGETARCH} /tmp +ADD https://github.com/prysmaticlabs/prysm/releases/download/${PRYSM_VERSION}/prysmctl-${PRYSM_VERSION}-linux-${TARGETARCH} /tmp +RUN mv /tmp/beacon-chain-${PRYSM_VERSION}-linux-${TARGETARCH} /usr/bin/prysm-beacon && chmod +x /usr/bin/prysm-beacon +RUN mv /tmp/validator-${PRYSM_VERSION}-linux-${TARGETARCH} /usr/bin/prysm-validator && chmod +x /usr/bin/prysm-validator +RUN mv /tmp/prysmctl-${PRYSM_VERSION}-linux-${TARGETARCH} /usr/bin/prysm-ctl && chmod +x /usr/bin/prysm-ctl ADD . /src/geth WORKDIR /src/geth -RUN apt-get install -y git-lfs -RUN cd fhevm-go-coproc && make build RUN go build ./cmd/bootnode RUN make geth @@ -29,11 +28,7 @@ COPY --from=build-env /src/geth/bootnode /usr/bin/ COPY --from=build-env /src/geth/build/bin/geth /usr/bin/ COPY --from=build-env /src/geth/local-testnet/prep/execution/genesis.json /usr/share/devnet-resources/genesis.json COPY --from=build-env /src/geth/local-testnet/prep/boot.key /usr/share/devnet-resources/boot.key -COPY --from=build-env /src/geth/local-testnet/fhevm-keys/cks /usr/share/devnet-resources/fhevm-keys/cks -COPY --from=build-env /src/geth/local-testnet/fhevm-keys/pks /usr/share/devnet-resources/fhevm-keys/pks -COPY --from=build-env /src/geth/local-testnet/fhevm-keys/sks /usr/share/devnet-resources/fhevm-keys/sks COPY --from=build-env /src/geth/local-testnet/prep/node1/keystore/ /val-data/keystore/ -COPY --from=build-env /src/geth/local-testnet/prep/coprocessor.key /rpc-data/ COPY --from=build-env /src/geth/local-testnet/prep/consensus/config.yml /usr/share/devnet-resources/consensus-config.yml COPY --from=build-env /src/geth/local-testnet/prep/consensus/validator-beacon-static-network-keys /val-data/consensus/beacondata/network-keys COPY --from=build-env /src/geth/scripts/run-single-node-devnet.sh /entrypoint.sh diff --git a/Makefile b/Makefile index 60a64e763..860136ee5 100644 --- a/Makefile +++ b/Makefile @@ -9,14 +9,11 @@ GO ?= latest GORUN = go run #? geth: Build geth -geth: fhevm-go-coproc +geth: $(GORUN) build/ci.go install ./cmd/geth @echo "Done building." @echo "Run \"$(GOBIN)/geth\" to launch geth." -fhevm-go-coproc: - cd fhevm-go-coproc && $(MAKE) build - #? all: Build all packages and executables all: $(GORUN) build/ci.go install diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index aeeb0bbb2..a1e9be79a 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -221,7 +221,10 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) ( if isValidCoprocessorSegment { if input != nil && res != nil && contract.Address() == in.evm.CoprocessorSession.ContractAddress() { log.Info("Executing coprocessor payload", "input", common.Bytes2Hex(input), "output", common.Bytes2Hex(res)) - coprocErr := in.evm.CoprocessorSession.Execute(input, res) + randAddress := common.HexToHash("0xa436a06f0efce5ea38c956a21e24202a59b3b746d48a23fb52b4a5bc33fe3e00") + randCounterValue := in.evm.StateDB.GetState(in.evm.CoprocessorSession.ContractAddress(), randAddress) + ed := fhevm.ExtraData{RandomCounter: randCounterValue} + coprocErr := in.evm.CoprocessorSession.Execute(input, ed, res) if coprocErr != nil { log.Error("Error executing coprocessor payload", "error", coprocErr) } diff --git a/go.mod b/go.mod index 43cf69e3c..b1e041b7f 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/golang/protobuf v1.5.4 github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb github.com/google/gofuzz v1.2.0 - github.com/google/uuid v1.3.0 + github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.4.2 github.com/graph-gophers/graphql-go v1.3.0 github.com/hashicorp/go-bexpr v0.1.10 @@ -68,12 +68,12 @@ require ( github.com/urfave/cli/v2 v2.25.7 github.com/zama-ai/fhevm-go-coproc v0.0.1 go.uber.org/automaxprocs v1.5.2 - golang.org/x/crypto v0.22.0 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.19.0 - golang.org/x/text v0.14.0 + golang.org/x/crypto v0.26.0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.24.0 + golang.org/x/text v0.17.0 golang.org/x/time v0.5.0 - golang.org/x/tools v0.20.0 + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -94,7 +94,7 @@ require ( github.com/aws/smithy-go v1.15.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.10.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect @@ -143,8 +143,10 @@ require ( github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.24.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/net v0.28.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect + google.golang.org/grpc v1.66.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect rsc.io/tmplfunc v0.0.3 // indirect ) diff --git a/go.sum b/go.sum index cf12811e9..223ac5808 100644 --- a/go.sum +++ b/go.sum @@ -103,8 +103,9 @@ github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -266,8 +267,8 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -286,8 +287,8 @@ github.com/google/pprof v0.0.0-20230207041349-798e818bf904 h1:4/hN5RUoecvl+RmJRE github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -393,7 +394,6 @@ github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -540,8 +540,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -613,8 +613,8 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -633,8 +633,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -696,8 +696,8 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -710,8 +710,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -762,8 +762,8 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -820,6 +820,8 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -832,6 +834,8 @@ google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKa google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -844,8 +848,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 35fa8b347..d308cead6 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -21,7 +21,6 @@ import ( "encoding/hex" "errors" "fmt" - "io" "math/big" "strings" "time" @@ -51,7 +50,6 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rpc" - signerApi "github.com/ethereum/go-ethereum/signer/core/apitypes" "github.com/ethereum/go-ethereum/trie" ) @@ -675,120 +673,6 @@ func (s *BlockChainAPI) GetBalance(ctx context.Context, address common.Address, return (*hexutil.Big)(b), state.Error() } -func createInputsTypedData(chainId *math.HexOrDecimal256, verifyingContract common.Address, inputs [][]byte, contractAddress common.Address, callerAddress common.Address) signerApi.TypedData { - hexInputs := make([]string, 0, len(inputs)) - for _, i := range inputs { - hexInputs = append(hexInputs, hexutil.Encode(i)) - } - - var domainType = []signerApi.Type{ - {Name: "name", Type: "string"}, - {Name: "version", Type: "string"}, - {Name: "chainId", Type: "uint256"}, - {Name: "verifyingContract", Type: "address"}, - } - - theData := signerApi.TypedData{ - Types: signerApi.Types{ - "EIP712Domain": domainType, - "CiphertextVerification": []signerApi.Type{ - {Name: "handlesList", Type: "uint256[]"}, - {Name: "contractAddress", Type: "address"}, - {Name: "callerAddress", Type: "address"}, - }, - }, - Domain: signerApi.TypedDataDomain{ - Name: "FHEVMCoprocessor", - Version: "1", - ChainId: chainId, - VerifyingContract: verifyingContract.Hex(), - }, - PrimaryType: "CiphertextVerification", - Message: signerApi.TypedDataMessage{ - "handlesList": hexInputs, - "contractAddress": contractAddress.Hex(), - "callerAddress": callerAddress.Hex(), - }, - } - - return theData -} - -// Inserts ciphertext with proof -func (s *BlockChainAPI) AddUserCiphertext(ctx context.Context, payload string, contractAddress common.Address, callerAddress common.Address) (map[string]interface{}, error) { - if vm.FhevmCoprocessor == nil { - return nil, errors.New("fhevm executor is disabled on this node") - } - - bytes, err := hexutil.Decode(payload) - if err != nil { - return nil, err - } - - handles, err := vm.FhevmCoprocessor.InsertInputCiphertext(bytes) - if err != nil { - return nil, err - } - - res := make(map[string]interface{}) - encHandles := make([]string, 0, len(handles.InputHandles)) - for _, i := range handles.InputHandles { - encHandles = append(encHandles, hexutil.Encode(i)) - } - res["handlesList"] = encHandles - res["contractAddress"] = contractAddress.Hex() - res["callerAddress"] = callerAddress.Hex() - - typedData := createInputsTypedData((*math.HexOrDecimal256)(s.ChainId()), vm.FhevmCoprocessor.CreateSession().ContractAddress(), handles.InputHandles, contractAddress, callerAddress) - hashOfPayload, _, err := signerApi.TypedDataAndHash(typedData) - if err != nil { - return nil, err - } - - signature, err := vm.FhevmCoprocessor.SignHash(hashOfPayload) - signature[64] += 27 // Transform V from 0/1 to 27/28 according to the yellow paper - - if err != nil { - return nil, err - } - - res["signature"] = hexutil.Encode(signature) - - return res, nil -} - -func (s *BlockChainAPI) GetCiphertextByHandle(ctx context.Context, bytes *hexutil.Bytes) (map[string]interface{}, error) { - if vm.FhevmCoprocessor == nil { - return nil, errors.New("fhevm executor is disabled on this node") - } - - theType, ct, err := vm.FhevmCoprocessor.GetStore().GetCiphertext(*bytes) - if err != nil { - return nil, err - } - - res := make(map[string]interface{}) - res["type"] = theType - res["ciphertext"] = hexutil.Encode(ct) - - return res, nil -} - -func (s *BlockChainAPI) GetPublicFhevmKey(ctx context.Context) (map[string]interface{}, error) { - if vm.FhevmCoprocessor == nil { - return nil, errors.New("fhevm executor is disabled on this node") - } - - bytes, err := io.ReadAll(vm.FhevmCoprocessor.PublicFhevmKey()) - if err != nil { - return nil, err - } - res := make(map[string]interface{}) - res["publicKey"] = hexutil.Encode(bytes) - - return res, nil -} - // AccountResult structs for GetProof type AccountResult struct { Address common.Address `json:"address"` diff --git a/local-testnet/setup.sh b/local-testnet/setup.sh index 07b214463..a68742b4a 100755 --- a/local-testnet/setup.sh +++ b/local-testnet/setup.sh @@ -103,7 +103,7 @@ tmux new -s val-val1 -d "./prysm-validator --datadir=$NODE_DIR/consensus/validat 2>&1 | tee $NODE_DIR/validator.log" NODE_DIR=node-rpc1 -RPC_PARAMS="FORCE_TRANSIENT_STORAGE=true FHEVM_GO_INIT_CKS=1 FHEVM_GO_KEYS_DIR=fhevm-keys FHEVM_CIPHERTEXTS_DB=$NODE_DIR/fhevm_ciphertexts.sqlite FHEVM_CONTRACT_ADDRESS=$COPROCESSOR_CONTRACT_ADDRESS FHEVM_COPROCESSOR_PRIVATE_KEY_FILE=$NODE_DIR/coprocessor.key" +RPC_PARAMS="FORCE_TRANSIENT_STORAGE=true FHEVM_COPROCESSOR_API_KEY=a1503fb6-d79b-4e9e-826d-44cf262f3e05 FHEVM_COPROCESSOR_URL=127.0.0.1:50051 FHEVM_CIPHERTEXTS_DB=$NODE_DIR/fhevm_ciphertexts.sqlite FHEVM_CONTRACT_ADDRESS=$COPROCESSOR_CONTRACT_ADDRESS" # rpc node tmux new -s exec-rpc1 -d "$RPC_PARAMS $GETH $STATE_SCHEME --datadir $NODE_DIR --port 30308 --http --http.port 8745 \ diff --git a/scripts/run-single-node-devnet.sh b/scripts/run-single-node-devnet.sh index 4c9e28013..38c3f4ccf 100755 --- a/scripts/run-single-node-devnet.sh +++ b/scripts/run-single-node-devnet.sh @@ -5,9 +5,8 @@ set -e ACL_CONTRACT_ADDRESS=${ACL_CONTRACT_ADDRESS:-0x168813841d158Ea8508f91f71aF338e4cB4d396e} COPROCESSOR_CONTRACT_ADDRESS=${COPROCESSOR_CONTRACT_ADDRESS:-0x6819e3aDc437fAf9D533490eD3a7552493fCE3B1} COPROCESSOR_ACCOUNT_ADDRESS=${COPROCESSOR_ACCOUNT_ADDRESS:-0xc9990FEfE0c27D31D0C2aa36196b085c0c4d456c} - -# serve keys so fhevm-go-coproc library can download at initialization -nohup python3 -m http.server -d /usr/share/devnet-resources/fhevm-keys 8000 > /var/log/http-server.log & +FHEVM_COPROCESSOR_API_KEY=${FHEVM_COPROCESSOR_API_KEY:-a1503fb6-d79b-4e9e-826d-44cf262f3e05} +FHEVM_COPROCESSOR_URL=${FHEVM_COPROCESSOR_URL:-127.0.0.1:50051} prysm-ctl testnet generate-genesis --fork=capella --num-validators=64 --genesis-time-delay=5 \ --output-ssz /consensus-genesis.ssz --chain-config-file=/usr/share/devnet-resources/consensus-config.yml \ @@ -98,16 +97,15 @@ nohup prysm-beacon --datadir=$NODE_DIR/consensus/beacondata \ --force-clear-db > /var/log/rpc-beacon.log & echo Running RPC node execution -FHEVM_GO_INIT_CKS=1 \ - FHEVM_GO_SKS_URL=http://127.0.0.1:8000/sks \ - FHEVM_GO_PKS_URL=http://127.0.0.1:8000/pks \ - FHEVM_GO_CKS_URL=http://127.0.0.1:8000/cks \ - FORCE_TRANSIENT_STORAGE=true \ - FHEVM_GO_KEYS_DIR=/usr/share/devnet-resources/fhevm-keys \ FHEVM_CIPHERTEXTS_DB=$NODE_DIR/fhevm_ciphertexts.sqlite \ FHEVM_CONTRACT_ADDRESS=$COPROCESSOR_CONTRACT_ADDRESS \ - FHEVM_COPROCESSOR_PRIVATE_KEY_FILE=$NODE_DIR/coprocessor.key \ FORCE_TRANSIENT_STORAGE=true \ + FHEVM_COPROCESSOR_URL=$FHEVM_COPROCESSOR_URL \ + FHEVM_COPROCESSOR_API_KEY=$FHEVM_COPROCESSOR_API_KEY \ geth --datadir $NODE_DIR --port 30308 --http --http.corsdomain='*' --http.addr 0.0.0.0 --http.port 8545 \ --bootnodes 'enode://0b7b41ca480f0ef4e1b9fa7323c3ece8ed42cb161eef5bf580c737fe2f33787de25a0c212c0ac7fdb429216baa3342c9b5493bd03122527ffb4c8c114d87f0a6@127.0.0.1:0?discport=30305' \ - --authrpc.port 8553 + --authrpc.port 8553 \ + --ws \ + --ws.addr 0.0.0.0 \ + --ws.port 8546 \ + --ws.origins '*'