Skip to content

Commit 39542a9

Browse files
CLI Command
1 parent b7fc8bc commit 39542a9

File tree

4 files changed

+185
-0
lines changed

4 files changed

+185
-0
lines changed
+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package e2e
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os/exec"
7+
"regexp"
8+
"testing"
9+
10+
"github.com/0xPolygonHermez/zkevm-node/etherman/smartcontracts/polygondatacommittee"
11+
"github.com/0xPolygonHermez/zkevm-node/etherman/smartcontracts/polygonzkevm"
12+
"github.com/0xPolygonHermez/zkevm-node/test/operations"
13+
"github.com/ethereum/go-ethereum/accounts/abi/bind"
14+
"github.com/ethereum/go-ethereum/common"
15+
"github.com/ethereum/go-ethereum/core/types"
16+
"github.com/ethereum/go-ethereum/ethclient"
17+
"github.com/stretchr/testify/require"
18+
)
19+
20+
func TestSetDataAvailabilityProtocol(t *testing.T) {
21+
if testing.Short() {
22+
t.Skip()
23+
}
24+
25+
ctx := context.Background()
26+
defer func() {
27+
require.NoError(t, operations.Teardown())
28+
}()
29+
30+
err := operations.Teardown()
31+
require.NoError(t, err)
32+
33+
opsCfg := operations.GetDefaultOperationsConfig()
34+
35+
opsman, err := operations.NewManager(ctx, opsCfg)
36+
require.NoError(t, err)
37+
38+
err = opsman.Setup()
39+
require.NoError(t, err)
40+
41+
clientL1, err := ethclient.Dial(operations.DefaultL1NetworkURL)
42+
require.NoError(t, err)
43+
44+
auth, err := operations.GetAuth(operations.DefaultSequencerPrivateKey, operations.DefaultL1ChainID)
45+
require.NoError(t, err)
46+
47+
zkEVM, err := polygonzkevm.NewPolygonzkevm(
48+
common.HexToAddress(operations.DefaultL1ZkEVMSmartContract),
49+
clientL1,
50+
)
51+
require.NoError(t, err)
52+
53+
currentDAPAddr, err := zkEVM.DataAvailabilityProtocol(&bind.CallOpts{Pending: false})
54+
require.NoError(t, err)
55+
require.Equal(t, common.HexToAddress(operations.DefaultL1DataCommitteeContract), currentDAPAddr)
56+
57+
// New DAC Setup
58+
newDAAddr, tx, newDA, err := polygondatacommittee.DeployPolygondatacommittee(auth, clientL1)
59+
require.NoError(t, err)
60+
require.NotEqual(t, newDAAddr, currentDAPAddr)
61+
require.NoError(t, operations.WaitTxToBeMined(ctx, clientL1, tx, operations.DefaultTimeoutTxToBeMined))
62+
63+
tx, err = newDA.Initialize(auth)
64+
require.NoError(t, err)
65+
require.NoError(t, operations.WaitTxToBeMined(ctx, clientL1, tx, operations.DefaultTimeoutTxToBeMined))
66+
67+
cmd := exec.Command("docker", "exec", "zkevm-sequence-sender",
68+
"/app/zkevm-node", "set-dap",
69+
"--da-addr", newDAAddr.String(),
70+
"--network", "custom",
71+
"--custom-network-file", "/app/genesis.json",
72+
"--key-store-path", "/pk/sequencer.keystore",
73+
"--pw", "testonly",
74+
"--cfg", "/app/config.toml")
75+
76+
output, err := cmd.CombinedOutput()
77+
require.NoError(t, err)
78+
79+
txHash := common.HexToHash(extractHexFromString(string(output)))
80+
fmt.Println("SetDataAvailabilityProtocol Output: ", string(output))
81+
fmt.Println("SetDataAvailabilityProtocol TxHash: ", extractHexFromString(string(output)))
82+
fmt.Println("SetDataAvailabilityProtocol TxHash after: ", txHash.String())
83+
84+
receipt, err := operations.WaitTxReceipt(ctx, txHash, 2*operations.DefaultTimeoutTxToBeMined, clientL1)
85+
require.NoError(t, err)
86+
require.Equal(t, types.ReceiptStatusSuccessful, receipt.Status)
87+
88+
currentDAPAddr, err = zkEVM.DataAvailabilityProtocol(&bind.CallOpts{Pending: false})
89+
require.NoError(t, err)
90+
require.Equal(t, newDAAddr, currentDAPAddr)
91+
}
92+
93+
func extractHexFromString(output string) string {
94+
re := regexp.MustCompile(`Transaction to set new data availability protocol sent. Hash: (0x[0-9a-fA-F]+)`)
95+
match := re.FindStringSubmatch(output)
96+
if len(match) > 1 {
97+
return match[1]
98+
}
99+
return ""
100+
}

cmd/data_availability_protocol.go

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main
2+
3+
import (
4+
"github.com/0xPolygonHermez/zkevm-node/config"
5+
"github.com/0xPolygonHermez/zkevm-node/log"
6+
"github.com/ethereum/go-ethereum/common"
7+
"github.com/urfave/cli/v2"
8+
)
9+
10+
const flagDAAddress = "data-availability-address"
11+
12+
var setDataAvailabilityProtocolFlags = []cli.Flag{
13+
&cli.StringFlag{
14+
Name: flagDAAddress,
15+
Aliases: []string{"da-addr"},
16+
Usage: "address of the new data availibility protocol",
17+
Required: true,
18+
},
19+
&cli.StringFlag{
20+
Name: config.FlagKeyStorePath,
21+
Aliases: []string{"ksp"},
22+
Usage: "the path of the key store file containing the private key of the account going to set new data availability protocol",
23+
Required: true,
24+
},
25+
&cli.StringFlag{
26+
Name: config.FlagPassword,
27+
Aliases: []string{"pw"},
28+
Usage: "the password do decrypt the key store file",
29+
Required: true,
30+
},
31+
&configFileFlag,
32+
&networkFlag,
33+
&customNetworkFlag,
34+
}
35+
36+
func setDataAvailabilityProtocol(ctx *cli.Context) error {
37+
c, err := config.Load(ctx, true)
38+
if err != nil {
39+
return err
40+
}
41+
42+
setupLog(c.Log)
43+
44+
daAddress := common.HexToAddress(ctx.String(flagDAAddress))
45+
addrKeyStorePath := ctx.String(config.FlagKeyStorePath)
46+
addrPassword := ctx.String(config.FlagPassword)
47+
48+
etherman, err := newEtherman(*c, nil)
49+
if err != nil {
50+
log.Fatal(err)
51+
return err
52+
}
53+
54+
auth, _, err := etherman.LoadAuthFromKeyStore(addrKeyStorePath, addrPassword)
55+
if err != nil {
56+
log.Fatal(err)
57+
return err
58+
}
59+
60+
tx, err := etherman.SetDataAvailabilityProtocol(auth.From, daAddress)
61+
if err != nil {
62+
return err
63+
}
64+
65+
log.Infof("Transaction to set new data availability protocol sent. Hash: %s", tx.Hash())
66+
67+
return nil
68+
}

cmd/main.go

+7
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,13 @@ func main() {
186186
Action: restore,
187187
Flags: restoreFlags,
188188
},
189+
{
190+
Name: "set-data-availability-protocol",
191+
Aliases: []string{"set-dap"},
192+
Usage: "Sets the new data availability protocol",
193+
Action: setDataAvailabilityProtocol,
194+
Flags: setDataAvailabilityProtocolFlags,
195+
},
189196
}
190197

191198
err := app.Run(os.Args)

etherman/etherman.go

+10
Original file line numberDiff line numberDiff line change
@@ -1874,3 +1874,13 @@ func (etherMan *Client) GetDAProtocolAddr() (common.Address, error) {
18741874
func (etherMan *Client) GetDAProtocolName() (string, error) {
18751875
return etherMan.DAProtocol.GetProcotolName(&bind.CallOpts{Pending: false})
18761876
}
1877+
1878+
// SetDataAvailabilityProtocol sets the address for the new data availability protocol
1879+
func (etherMan *Client) SetDataAvailabilityProtocol(from, daAddress common.Address) (*types.Transaction, error) {
1880+
auth, err := etherMan.getAuthByAddress(from)
1881+
if err != nil {
1882+
return nil, err
1883+
}
1884+
1885+
return etherMan.ZkEVM.SetDataAvailabilityProtocol(&auth, daAddress)
1886+
}

0 commit comments

Comments
 (0)