Skip to content

Commit

Permalink
Merge pull request #8 from rgeraldes24/fix/contract
Browse files Browse the repository at this point in the history
Add working version of the contract package
  • Loading branch information
cyyber committed Jan 9, 2024
2 parents 69e5b12 + 9b04503 commit 8a3f919
Show file tree
Hide file tree
Showing 10 changed files with 63 additions and 53 deletions.
4 changes: 3 additions & 1 deletion contracts/deposit/BUILD.bazel
Expand Up @@ -40,7 +40,7 @@ go_test(
"//config/params:go_default_library",
"//container/trie:go_default_library",
"//contracts/deposit/mock:go_default_library",
"//crypto/bls:go_default_library",
"//crypto/dilithium:go_default_library",
"//proto/prysm/v1alpha1:go_default_library",
"//runtime/interop:go_default_library",
"//testing/assert:go_default_library",
Expand All @@ -49,5 +49,7 @@ go_test(
"@com_github_theqrl_go_zond//:go_default_library",
"@com_github_theqrl_go_zond//accounts/abi/bind:go_default_library",
"@com_github_theqrl_go_zond//common:go_default_library",
"@com_github_theqrl_go_zond//core/types:go_default_library",
"@com_github_theqrl_go_qrllib//common:go_default_library",
],
)
2 changes: 1 addition & 1 deletion contracts/deposit/bytecode.bin

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions contracts/deposit/contract_test.go
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/binary"
"testing"

"github.com/theQRL/go-zond"
zond "github.com/theQRL/go-zond"
"github.com/theQRL/go-zond/common"
depositcontract "github.com/theQRL/qrysm/v4/contracts/deposit"
"github.com/theQRL/qrysm/v4/contracts/deposit/mock"
Expand Down Expand Up @@ -41,7 +41,7 @@ func TestRegister_Below1ETH(t *testing.T) {
func TestValidatorRegister_OK(t *testing.T) {
testAccount, err := mock.Setup()
require.NoError(t, err)
testAccount.TxOpts.Value = mock.Amount32Eth()
testAccount.TxOpts.Value = mock.Amount40000Eth()

// Generate deposit data
privKeys, pubKeys, err := interop.DeterministicallyGenerateKeys(0 /*startIndex*/, 1)
Expand All @@ -61,7 +61,7 @@ func TestValidatorRegister_OK(t *testing.T) {
testAccount.Backend.Commit()
assert.NoError(t, err, "Validator registration failed")

query := ethereum.FilterQuery{
query := zond.FilterQuery{
Addresses: []common.Address{
testAccount.ContractAddr,
},
Expand Down
21 changes: 6 additions & 15 deletions contracts/deposit/deposit_contract.sol
Expand Up @@ -9,7 +9,7 @@

// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.6.11;
pragma solidity ^0.8.22;

// This interface is designed to be compatible with the Vyper version.
/// @notice This is the Ethereum 2.0 deposit contract interface.
Expand All @@ -25,9 +25,9 @@ interface IDepositContract {
);

/// @notice Submit a Phase 0 DepositData object.
/// @param pubkey A BLS12-381 public key.
/// @param pubkey A Dilithium public key.
/// @param withdrawal_credentials Commitment to a public key for withdrawals.
/// @param signature A BLS12-381 signature.
/// @param signature A Dilithium signature.
/// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.
/// Used as a protection against malformed input.
function deposit(
Expand Down Expand Up @@ -105,9 +105,9 @@ contract DepositContract is IDepositContract, ERC165 {
bytes32 deposit_data_root
) override external payable {
// Extended ABI length checks since dynamic types are used.
require(pubkey.length == 48, "DepositContract: invalid pubkey length");
require(pubkey.length == 2592, "DepositContract: invalid pubkey length");
require(withdrawal_credentials.length == 32, "DepositContract: invalid withdrawal_credentials length");
require(signature.length == 96, "DepositContract: invalid signature length");
require(signature.length == 4595, "DepositContract: invalid signature length");

// Check deposit amount
require(msg.value >= 1 ether, "DepositContract: deposit value too low");
Expand All @@ -125,16 +125,7 @@ contract DepositContract is IDepositContract, ERC165 {
to_little_endian_64(uint64(deposit_count))
);

// Compute deposit data root (`DepositData` hash tree root)
bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0)));
bytes32 signature_root = sha256(abi.encodePacked(
sha256(abi.encodePacked(signature[:64])),
sha256(abi.encodePacked(signature[64:], bytes32(0)))
));
bytes32 node = sha256(abi.encodePacked(
sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)),
sha256(abi.encodePacked(amount, bytes24(0), signature_root))
));
bytes32 node = depositroot(pubkey, withdrawal_credentials, amount, signature);

// Verify computed and expected deposit data roots match
require(node == deposit_data_root, "DepositContract: reconstructed DepositData does not match supplied deposit_data_root");
Expand Down
16 changes: 12 additions & 4 deletions contracts/deposit/deposit_test.go
@@ -1,29 +1,37 @@
package deposit_test

import (
"crypto/rand"
"testing"

"github.com/theQRL/go-qrllib/common"
"github.com/theQRL/qrysm/v4/beacon-chain/core/signing"
"github.com/theQRL/qrysm/v4/config/params"
"github.com/theQRL/qrysm/v4/contracts/deposit"
"github.com/theQRL/qrysm/v4/crypto/bls"
"github.com/theQRL/qrysm/v4/crypto/dilithium"
zondpb "github.com/theQRL/qrysm/v4/proto/prysm/v1alpha1"
"github.com/theQRL/qrysm/v4/testing/assert"
"github.com/theQRL/qrysm/v4/testing/require"
"github.com/theQRL/qrysm/v4/testing/util"
)

func TestDepositInput_GeneratesPb(t *testing.T) {
k1, err := bls.RandKey()
var seed [common.SeedSize]uint8
_, err := rand.Read(seed[:])
require.NoError(t, err)
k2, err := bls.RandKey()
k1, err := dilithium.SecretKeyFromBytes(seed[:])
require.NoError(t, err)

_, err = rand.Read(seed[:])
require.NoError(t, err)
k2, err := dilithium.SecretKeyFromBytes(seed[:])
require.NoError(t, err)

result, _, err := deposit.DepositInput(k1, k2, 0, nil)
require.NoError(t, err)
assert.DeepEqual(t, k1.PublicKey().Marshal(), result.PublicKey)

sig, err := bls.SignatureFromBytes(result.Signature)
sig, err := dilithium.SignatureFromBytes(result.Signature)
require.NoError(t, err)
testData := &zondpb.DepositMessage{
PublicKey: result.PublicKey,
Expand Down
4 changes: 2 additions & 2 deletions contracts/deposit/deposit_tree_test.go
Expand Up @@ -32,7 +32,7 @@ func TestDepositTrieRoot_OK(t *testing.T) {
depositDataItems, depositDataRoots, err := interop.DepositDataFromKeys(privKeys, pubKeys)
require.NoError(t, err)

testAcc.TxOpts.Value = depositcontract.Amount32Eth()
testAcc.TxOpts.Value = depositcontract.Amount40000Eth()

for i := 0; i < 100; i++ {
data := depositDataItems[i]
Expand Down Expand Up @@ -73,7 +73,7 @@ func TestDepositTrieRoot_Fail(t *testing.T) {
require.NoError(t, err)
depositDataItems, depositDataRoots, err := interop.DepositDataFromKeys(privKeys, pubKeys)
require.NoError(t, err)
testAcc.TxOpts.Value = depositcontract.Amount32Eth()
testAcc.TxOpts.Value = depositcontract.Amount40000Eth()

for i := 0; i < 100; i++ {
data := depositDataItems[i]
Expand Down
10 changes: 5 additions & 5 deletions contracts/deposit/mock/mock.go

Large diffs are not rendered by default.

45 changes: 26 additions & 19 deletions deps.bzl
Expand Up @@ -1023,8 +1023,8 @@ def qrysm_deps():
patches = [
"//third_party:com_github_ethereum_go_ethereum_secp256k1.patch",
],
sum = "h1:UF2FaUKPIy5jeZk3X06ait3y2Q4wI+vJ1l7+UARp+60=",
version = "v1.13.1",
sum = "h1:dZALM0PlDTtNITTECPiqSrFo0iEYVDfby+mSVc0LxIs=",
version = "v1.13.0",
)

go_repository(
Expand Down Expand Up @@ -1056,8 +1056,8 @@ def qrysm_deps():
go_repository(
name = "com_github_ferranbt_fastssz",
importpath = "github.com/ferranbt/fastssz",
sum = "h1:c3p3UzV4vFA7xaCDphnDWOjpxcadrQ26l5b+ypsvyxo=",
version = "v0.0.0-20221107182844-78142813af44",
sum = "h1:9VDpsWq096+oGMDTT/SgBD/VgZYf4pTF+KTPmZ+OaKM=",
version = "v0.0.0-20210120143747-11b9eff30ea9",
)
go_repository(
name = "com_github_fjl_gencodec",
Expand Down Expand Up @@ -1617,11 +1617,11 @@ def qrysm_deps():
)

go_repository(
name = "com_github_google_subcommands",
importpath = "github.com/google/subcommands",
sum = "h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=",
version = "v1.2.0",
)
name = "com_github_google_subcommands",
importpath = "github.com/google/subcommands",
sum = "h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE=",
version = "v1.2.0",
)
go_repository(
name = "com_github_guptarohit_asciigraph",
importpath = "github.com/guptarohit/asciigraph",
Expand Down Expand Up @@ -3387,8 +3387,8 @@ def qrysm_deps():
go_repository(
name = "com_github_prysmaticlabs_fastssz",
importpath = "github.com/prysmaticlabs/fastssz",
sum = "h1:Y3PcvUrnneMWLuypZpwPz8P70/DQsz6KgV9JveKpyZs=",
version = "v0.0.0-20220628121656-93dfe28febab",
sum = "h1:c3p3UzV4vFA7xaCDphnDWOjpxcadrQ26l5b+ypsvyxo=",
version = "v0.0.0-20221107182844-78142813af44",
)

go_repository(
Expand Down Expand Up @@ -3524,8 +3524,8 @@ def qrysm_deps():
"gazelle:exclude gen_properties.go",
],
importpath = "github.com/rivo/uniseg",
sum = "h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=",
version = "v0.4.4",
sum = "h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=",
version = "v0.4.3",
)
go_repository(
name = "com_github_rjeczalik_notify",
Expand Down Expand Up @@ -5669,14 +5669,14 @@ def go_dependencies():
go_repository(
name = "com_github_crate_crypto_go_kzg_4844",
importpath = "github.com/crate-crypto/go-kzg-4844",
sum = "h1:UVuHOE+5tIWrim4zf/Xaa43+MIsDCPyW76QhUpiMGj4=",
version = "v0.2.0",
sum = "h1:UBlWE0CgyFqqzTI+IFyCzA7A3Zw4iip6uzRv5NIXG0A=",
version = "v0.3.0",
)
go_repository(
name = "com_github_ethereum_c_kzg_4844",
importpath = "github.com/ethereum/c-kzg-4844",
sum = "h1:+cUvymlnoDDQgMInp25Bo3OmLajmmY8mLJ/tLjqd77Q=",
version = "v0.2.0",
sum = "h1:sR65+68+WdnMKxseNWxSJuAv2tsUrihTpVBTfM/U5Zg=",
version = "v0.3.1",
)
go_repository(
name = "com_github_kilic_bls12_381",
Expand All @@ -5690,6 +5690,13 @@ def go_dependencies():
sum = "h1:cZC+usqsYgHtlBaGulVnZ1hfKAi8iWtujBnRLQE698c=",
version = "v0.0.0-20220416220906-d8552aa452c7",
)
go_repository(
name = "com_github_prysmaticlabs_go_bitfield",
importpath = "github.com/prysmaticlabs/go-bitfield",
sum = "h1:Ws/Of2yg9JTVV9n8lQGXAf1RDDNthAu3SvTj93HkHgM=",
version = "v0.0.0-20210108222456-8e92c3709aa0",
)

go_repository(
name = "com_github_theqrl_go_zond",
build_directives = [
Expand All @@ -5700,8 +5707,8 @@ def go_dependencies():
patches = [
"//third_party:com_github_theqrl_go_zond_secp256k1.patch",
],
sum = "h1:BvT+70NXBzy2kvTzKnb2lpkPqFPBefcxnNDLvvSVwCo=",
version = "v0.0.0-20231010132528-f0be919588c9",
sum = "h1:Gt7hMvqxfEEt3TKGFunMkbkNndnNJ11HCDOiCN/RDzY=",
version = "v0.0.0-20240109134606-45a2c3abad1d",
)
go_repository(
name = "com_github_theqrl_go_zond_types",
Expand Down
4 changes: 1 addition & 3 deletions go.mod
Expand Up @@ -70,7 +70,7 @@ require (
github.com/supranational/blst v0.3.11
github.com/theQRL/go-bitfield v0.0.0-20231204084259-f3b877be8f63
github.com/theQRL/go-qrllib v0.0.0-20230406170304-b7eb19c367e1
github.com/theQRL/go-zond v0.0.0-20231010132528-f0be919588c9
github.com/theQRL/go-zond v0.0.0-20240109134606-45a2c3abad1d
github.com/theQRL/go-zond-wallet-encryptor-keystore v0.0.0-20231020114450-f6f12b82ea8b
github.com/thomaso-mirodin/intmath v0.0.0-20160323211736-5dc6d854e46e
github.com/trailofbits/go-mutexasserts v0.0.0-20230328101604-8cdbc5f3d279
Expand Down Expand Up @@ -270,5 +270,3 @@ replace github.com/json-iterator/go => github.com/prestonvanloon/go v1.1.7-0.201

// See https://github.com/prysmaticlabs/grpc-gateway/issues/2
replace github.com/grpc-ecosystem/grpc-gateway/v2 => github.com/theQRL/grpc-gateway/v2 v2.0.0-20231017104325-b6100930ca2f

replace github.com/theQRL/go-zond => github.com/cyyber/go-zond v0.0.0-20231201081419-5ed6809e9a97
4 changes: 4 additions & 0 deletions go.sum
Expand Up @@ -209,6 +209,7 @@ github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM
github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s=
github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ=
github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg=
github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2/go.mod h1:8BT+cPK6xvFOcRlk0R8eg+OTkcqI6baNH4xAkpiYVvQ=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM=
github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ=
Expand Down Expand Up @@ -394,6 +395,7 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
Expand Down Expand Up @@ -1264,6 +1266,8 @@ github.com/theQRL/go-bitfield v0.0.0-20231204084259-f3b877be8f63 h1:cU1QlEDDZ3zI
github.com/theQRL/go-bitfield v0.0.0-20231204084259-f3b877be8f63/go.mod h1:Xm3tb2axH6IT4miFd3hKIeD877Y6aA9Hxf2jOYtfTIk=
github.com/theQRL/go-qrllib v0.0.0-20230406170304-b7eb19c367e1 h1:YvUxImh18qCxX1rjvYF9wqAAL236s2FqrjzTRqg5Alg=
github.com/theQRL/go-qrllib v0.0.0-20230406170304-b7eb19c367e1/go.mod h1:IspDEOeIlmm6GujPeTNygL3T72MUluDDyUa20AisjaQ=
github.com/theQRL/go-zond v0.0.0-20240109134606-45a2c3abad1d h1:Gt7hMvqxfEEt3TKGFunMkbkNndnNJ11HCDOiCN/RDzY=
github.com/theQRL/go-zond v0.0.0-20240109134606-45a2c3abad1d/go.mod h1:vopU4opPUSj6HxhT6mqISmGbTejKcciluUp6OWJvUfI=
github.com/theQRL/go-zond-types v0.0.0-20230824233758-ea0b707a1e23 h1:9ifrMzlO0V61aT0nThIPFaEu83VAImLhAWGg5ppDf9A=
github.com/theQRL/go-zond-wallet-encryptor-keystore v0.0.0-20231020114450-f6f12b82ea8b h1:tX4WpoKWAXMyHFLMTQugNISJlPzP+V64y81RClFbufU=
github.com/theQRL/go-zond-wallet-encryptor-keystore v0.0.0-20231020114450-f6f12b82ea8b/go.mod h1:I5bUryQPoIVh1OJ1rEsrzCiX7Z9UNThZv5Z39vhU9aE=
Expand Down

0 comments on commit 8a3f919

Please sign in to comment.