Skip to content
This repository has been archived by the owner on May 11, 2024. It is now read-only.

feat(all): update bindings based on latest tokenomics changes #367

Merged
merged 28 commits into from
Aug 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
0feccbb
feat(all): update bindings based on latest tokenomics changes
davidtaikocha Aug 21, 2023
5fe3ffc
feat(all): offchain prover pool / alpha 5 tokenomics / bindings updat…
cyberhorsey Aug 25, 2023
0bbf349
resolve merge conflicts from main
cyberhorsey Aug 25, 2023
3394c12
remove parentgasused for valid proof checks
cyberhorsey Aug 25, 2023
b9da693
lints + protocol fixes, update bindings to latest
cyberhorsey Aug 25, 2023
898bdc6
fix tests post-merge
cyberhorsey Aug 25, 2023
d9158b2
chainsync tests
cyberhorsey Aug 25, 2023
43d4ca2
add logs
cyberhorsey Aug 25, 2023
f1c5be6
add block proposal fee iterations
cyberhorsey Aug 25, 2023
d4b2c0d
add iterations to tests
cyberhorsey Aug 25, 2023
c9f0335
test fix
cyberhorsey Aug 26, 2023
1fd8be1
check error
cyberhorsey Aug 26, 2023
5091cd2
Flag name
cyberhorsey Aug 26, 2023
0d4778a
taiko token in tests
cyberhorsey Aug 26, 2023
9ef4984
.
cyberhorsey Aug 26, 2023
93db412
depositTaikoToken needs approval beforehand now due to taiko-mono cha…
cyberhorsey Aug 26, 2023
e4ba80a
bindings
cyberhorsey Aug 26, 2023
2975cec
fix: fix synced block check
davidtaikocha Aug 28, 2023
5a50d78
chore: update workflow
davidtaikocha Aug 28, 2023
7af5330
chore: go mod tidy
davidtaikocha Aug 28, 2023
efff3c6
chore: update workflow
davidtaikocha Aug 28, 2023
bf20f25
feat: fix panic
davidtaikocha Aug 28, 2023
56a0c70
feat: more logs
davidtaikocha Aug 28, 2023
a56e03d
feat: add ctx
davidtaikocha Aug 28, 2023
6a5125d
fix: fix proveBlock
davidtaikocha Aug 28, 2023
f05205d
chore: update ci
davidtaikocha Aug 28, 2023
52d298a
fix todo
RogerLamTd Aug 29, 2023
4094c39
test: update comments
davidtaikocha Aug 29, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bindings/.githead
Original file line number Diff line number Diff line change
@@ -1 +1 @@
55be84a00af93ff248059a86546f215a8702e95b
437763a729bbf02cbf588559a20cc354f19b1677
60 changes: 51 additions & 9 deletions bindings/encoding/input.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,6 @@ var (
Name: "beneficiary",
Type: "address",
},
{
Name: "treasury",
Type: "address",
},
{
Name: "depositsProcessed",
Type: "tuple[]",
Expand Down Expand Up @@ -128,18 +124,40 @@ var (
Type: "address",
},
{
Name: "parentGasUsed",
Type: "uint32",
Name: "proofs",
Type: "bytes",
},
}
proverAssignmentComponents = []abi.ArgumentMarshaling{
{
Name: "gasUsed",
Type: "uint32",
Name: "prover",
Type: "address",
},
{
Name: "expiry",
Type: "uint64",
},
{
Name: "proof",
Name: "data",
Type: "bytes",
},
}
proposeBlockDataComponents = []abi.ArgumentMarshaling{
{
Name: "input",
Type: "tuple",
Components: blockMetadataInputComponents,
},
{
Name: "fee",
Type: "uint256",
},

{
Name: "expiry",
Type: "uint64",
},
}
)

var (
Expand All @@ -152,6 +170,12 @@ var (
// Evidence
EvidenceType, _ = abi.NewType("tuple", "TaikoData.BlockEvidence", evidenceComponents)
EvidenceArgs = abi.Arguments{{Name: "Evidence", Type: EvidenceType}}
// ProverAssignment
proverAssignmentType, _ = abi.NewType("tuple", "ProverAssignment", proverAssignmentComponents)
proverAssignmentArgs = abi.Arguments{{Name: "ProverAssignment", Type: proverAssignmentType}}
// ProposeBlockData
proposeBlockDataType, _ = abi.NewType("tuple", "ProposeBlockData", proposeBlockDataComponents)
proposeBlockDataArgs = abi.Arguments{{Name: "ProposeBlockData", Type: proposeBlockDataType}}
)

// Contract ABIs.
Expand Down Expand Up @@ -190,6 +214,24 @@ func EncodeBlockMetadata(meta *bindings.TaikoDataBlockMetadata) ([]byte, error)
return b, nil
}

// EncodeProverAssignment performs the solidity `abi.encode` for the given proverAssignment.
func EncodeProverAssignment(assignment *ProverAssignment) ([]byte, error) {
b, err := proverAssignmentArgs.Pack(assignment)
if err != nil {
return nil, fmt.Errorf("failed to abi.encode prover assignment, %w", err)
}
return b, nil
}

// EncodeProposeBlockData performs the solidity `abi.encode` for the given proposeBlockData.
func EncodeProposeBlockData(data *ProposeBlockData) ([]byte, error) {
b, err := proposeBlockDataArgs.Pack(data)
if err != nil {
return nil, fmt.Errorf("failed to abi.encode proposeBlock data, %w", err)
}
return b, nil
}

// EncodeEvidence performs the solidity `abi.encode` for the given evidence.
func EncodeEvidence(e *TaikoL1Evidence) ([]byte, error) {
b, err := EvidenceArgs.Pack(e)
Expand Down
214 changes: 109 additions & 105 deletions bindings/encoding/input_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,18 @@ import (
"github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types"
"github.com/stretchr/testify/require"
"github.com/taikoxyz/taiko-client/bindings"
)

func TestEncodeEvidence(t *testing.T) {
evidence := &TaikoL1Evidence{
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
ParentGasUsed: 1024,
GasUsed: 1024,
Proof: randomHash().Big().Bytes(),
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
Proofs: randomHash().Big().Bytes(),
}

b, err := EncodeEvidence(evidence)
Expand All @@ -44,15 +43,26 @@ func TestEncodeProposeBlockInput(t *testing.T) {
func TestEncodeProveBlockInput(t *testing.T) {
encoded, err := EncodeProveBlockInput(
&TaikoL1Evidence{
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
ParentGasUsed: 1024,
GasUsed: 1024,
Proof: randomHash().Big().Bytes(),
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
Proofs: randomHash().Big().Bytes(),
},
)

require.Nil(t, err)
require.NotNil(t, encoded)
}

func TestEncodeProverAssignment(t *testing.T) {
encoded, err := EncodeProverAssignment(
&ProverAssignment{
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
Data: randomHash().Big().Bytes(),
Expiry: 1024,
},
)

Expand All @@ -63,15 +73,13 @@ func TestEncodeProveBlockInput(t *testing.T) {
func TestEncodeProveBlockInvalidInput(t *testing.T) {
encoded, err := EncodeProveBlockInvalidInput(
&TaikoL1Evidence{
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
ParentGasUsed: 1024,
GasUsed: 1024,
Proof: randomHash().Big().Bytes(),
MetaHash: randomHash(),
BlockHash: randomHash(),
ParentHash: randomHash(),
SignalRoot: randomHash(),
Graffiti: randomHash(),
Prover: common.BigToAddress(new(big.Int).SetUint64(rand.Uint64())),
Proofs: randomHash().Big().Bytes(),
},
&testMeta,
types.NewReceipt(randomHash().Bytes(), false, 1024),
Expand All @@ -81,84 +89,80 @@ func TestEncodeProveBlockInvalidInput(t *testing.T) {
require.NotNil(t, encoded)
}

// TODO(Roger): fix this test
// func TestEncodeBlockMetadata(t *testing.T) {
// // since strings are right padded in solidity https://github.com/ethereum/solidity/issues/1340
// var abcdBytes [32]byte
// copy(abcdBytes[:], common.RightPadBytes([]byte("abcd"), 32))

// // Encode block metadata using EncodeBlockMetadata function
// encoded, err := EncodeBlockMetadata(&bindings.TaikoDataBlockMetadata{
// Id: uint64(1),
// L1Height: uint64(1),
// L1Hash: abcdBytes,
// Beneficiary: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"),
// Treasury: common.HexToAddress("0x50081b12838240B1bA02b3177153Bca678a86078"),
// TxListHash: abcdBytes,
// TxListByteStart: big.NewInt(0),
// TxListByteEnd: big.NewInt(1000),
// GasLimit: 1,
// MixHash: abcdBytes,
// Timestamp: uint64(1),
// DepositsProcessed: []bindings.TaikoDataEthDeposit{},
// })

// require.Nil(t, err)
// require.NotNil(t, encoded)

// kgv, err := hexutil.Decode("0x0000000000000000000000000000000000000000000000000" +
// "000000000000020000000000000000000000000000000000000000000000000000000000000000" +
// "100000000000000000000000000000000000000000000000000000000000000010000000000000" +
// "000000000000000000000000000000000000000000000000001616263640000000000000000000" +
// "000000000000000000000000000000000000061626364000000000000000000000000000000000" +
// "000000000000000000000006162636400000000000000000000000000000000000000000000000" +
// "000000000000000000000000000000000000000000000000000000000000000000000000000000" +
// "000000000000000000000000000000000000000000000000000000003e80000000000000000000" +
// "00000000000000000000000000000000000000000000100000000000000000000000010020fcb7" +
// "2e27650651b05ed2ceca493bc807ba400000000000000000000000050081b12838240b1ba02b31" +
// "77153bca678a860780000000000000000000000000000000000000000000000000000000000000" +
// "1800000000000000000000000000000000000000000000000000000000000000000")

// require.Nil(t, err)
// require.Equal(t, kgv, encoded)

// encoded2, err := EncodeBlockMetadata(&bindings.TaikoDataBlockMetadata{
// Id: uint64(1),
// L1Height: uint64(1),
// L1Hash: abcdBytes,
// Beneficiary: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"),
// Treasury: common.HexToAddress("0x50081b12838240B1bA02b3177153Bca678a86078"),
// TxListHash: abcdBytes,
// TxListByteStart: big.NewInt(0),
// TxListByteEnd: big.NewInt(1000),
// GasLimit: 1,
// MixHash: abcdBytes,
// Timestamp: uint64(1),
// DepositsProcessed: []bindings.TaikoDataEthDeposit{
// {Recipient: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"), Amount: big.NewInt(2)},
// },
// })

// require.Nil(t, err)
// require.NotNil(t, encoded2)

// kgv2, err := hexutil.Decode("0x0000000000000000000000000000000000000000000000000" +
// "0000000000000200000000000000000000000000000000000000000000000000000000000000001000" +
// "0000000000000000000000000000000000000000000000000000000000001000000000000000000000" +
// "0000000000000000000000000000000000000000001616263640000000000000000000000000000000" +
// "0000000000000000000000000616263640000000000000000000000000000000000000000000000000" +
// "0000000616263640000000000000000000000000000000000000000000000000000000000000000000" +
// "0000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
// "000000000000000000000000000000003e800000000000000000000000000000000000000000000000" +
// "0000000000000000100000000000000000000000010020fcb72e27650651b05ed2ceca493bc807ba40" +
// "0000000000000000000000050081b12838240b1ba02b3177153bca678a860780000000000000000000" +
// "0000000000000000000000000000000000000000001800000000000000000000000000000000000000" +
// "00000000000000000000000000100000000000000000000000010020fcb72e27650651b05ed2ceca49" +
// "3bc807ba40000000000000000000000000000000000000000000000000000000000000002")

// require.Nil(t, err)
// require.Equal(t, kgv2, encoded2)
// }
func TestEncodeBlockMetadata(t *testing.T) {
// since strings are right padded in solidity https://github.com/ethereum/solidity/issues/1340
var abcdBytes [32]byte
copy(abcdBytes[:], common.RightPadBytes([]byte("abcd"), 32))

// Encode block metadata using EncodeBlockMetadata function
encoded, err := EncodeBlockMetadata(&bindings.TaikoDataBlockMetadata{
Id: uint64(1),
L1Height: uint64(1),
L1Hash: abcdBytes,
Beneficiary: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"),
TxListHash: abcdBytes,
TxListByteStart: big.NewInt(0),
TxListByteEnd: big.NewInt(1000),
GasLimit: 1,
MixHash: abcdBytes,
Timestamp: uint64(1),
DepositsProcessed: []bindings.TaikoDataEthDeposit{},
})

require.Nil(t, err)
require.NotNil(t, encoded)

kgv, err := hexutil.Decode("0x00000000000000000000000000000000000000000000000000000000" +
"0000002000000000000000000000000000000000000000000000000000000000000000010000000000000" +
"0000000000000000000000000000000000000000000000000010000000000000000000000000000000000" +
"0000000000000000000000000000016162636400000000000000000000000000000000000000000000000" +
"0000000006162636400000000000000000000000000000000000000000000000000000000616263640000" +
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"00000003e8000000000000000000000000000000000000000000000000000000000000000100000000000" +
"000000000000010020fcb72e27650651b05ed2ceca493bc807ba400000000000000000000000000000000" +
"0000000000000000000000000000016000000000000000000000000000000000000000000000000000000" +
"00000000000")

require.Nil(t, err)
require.Equal(t, kgv, encoded)

encoded2, err := EncodeBlockMetadata(&bindings.TaikoDataBlockMetadata{
Id: uint64(1),
L1Height: uint64(1),
L1Hash: abcdBytes,
Beneficiary: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"),
TxListHash: abcdBytes,
TxListByteStart: big.NewInt(0),
TxListByteEnd: big.NewInt(1000),
GasLimit: 1,
MixHash: abcdBytes,
Timestamp: uint64(1),
DepositsProcessed: []bindings.TaikoDataEthDeposit{
{Recipient: common.HexToAddress("0x10020FCb72e27650651B05eD2CEcA493bC807Ba4"), Amount: big.NewInt(2), Id: uint64(1)},
},
})

require.Nil(t, err)
require.NotNil(t, encoded2)

kgv2, err := hexutil.Decode("0x0000000000000000000000000000000000000000000000000000000" +
"0000000200000000000000000000000000000000000000000000000000000000000000001000000000000" +
"0000000000000000000000000000000000000000000000000001000000000000000000000000000000000" +
"0000000000000000000000000000001616263640000000000000000000000000000000000000000000000" +
"0000000000616263640000000000000000000000000000000000000000000000000000000061626364000" +
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +
"000000003e800000000000000000000000000000000000000000000000000000000000000010000000000" +
"0000000000000010020fcb72e27650651b05ed2ceca493bc807ba40000000000000000000000000000000" +
"0000000000000000000000000000001600000000000000000000000000000000000000000000000000000" +
"00000000000100000000000000000000000010020fcb72e27650651b05ed2ceca493bc807ba4000000000" +
"0000000000000000000000000000000000000000000000000000002000000000000000000000000000000" +
"0000000000000000000000000000000001")

require.Nil(t, err)
require.Equal(t, kgv2, encoded2)
}

func TestUnpackTxListBytes(t *testing.T) {
_, err := UnpackTxListBytes(randomBytes(1024))
Expand Down
28 changes: 19 additions & 9 deletions bindings/encoding/struct.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,13 @@ type BlockHeader struct {
}

type TaikoL1Evidence struct {
MetaHash [32]byte
BlockHash [32]byte
ParentHash [32]byte
SignalRoot [32]byte
Graffiti [32]byte
Prover common.Address
ParentGasUsed uint32
GasUsed uint32
Proof []byte
MetaHash [32]byte
BlockHash [32]byte
ParentHash [32]byte
SignalRoot [32]byte
Graffiti [32]byte
Prover common.Address
Proofs []byte
}

type TaikoL1BlockMetadataInput struct {
Expand All @@ -51,6 +49,18 @@ type TaikoL1BlockMetadataInput struct {
CacheTxListInfo bool
}

type ProverAssignment struct {
Prover common.Address
Expiry uint64
Data []byte
}

type ProposeBlockData struct {
Input TaikoL1BlockMetadataInput `json:"input"`
Fee *big.Int `json:"fee"`
Expiry uint64 `json:"expiry"`
}

// FromGethHeader converts a GETH *types.Header to *BlockHeader.
func FromGethHeader(header *types.Header) *BlockHeader {
baseFeePerGas := header.BaseFee
Expand Down
1 change: 0 additions & 1 deletion bindings/encoding/struct_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ var (
TxListByteEnd: common.Big256,
GasLimit: rand.Uint32(),
Beneficiary: common.BytesToAddress(randomHash().Bytes()),
Treasury: common.BytesToAddress(randomHash().Bytes()),
DepositsProcessed: []bindings.TaikoDataEthDeposit{},
}
)
Expand Down
Loading