From d48cb784908a0bfd06552a1fdd11d28dfaf30866 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Mon, 12 May 2025 23:48:07 -0500 Subject: [PATCH 01/13] add sui gateway upgrade e2e test --- cmd/zetae2e/config/config.go | 1 + cmd/zetae2e/config/contracts.go | 3 + cmd/zetae2e/local/local.go | 4 + .../orchestrator/Dockerfile.fastbuild | 5 + .../localnet/orchestrator/start-zetae2e.sh | 6 + contrib/localnet/sui/sui_client.yaml | 9 ++ e2e/config/config.go | 1 + e2e/contracts/sui/gateway.mv | Bin 2943 -> 2982 bytes e2e/contracts/sui/protocol-contracts-sui | 1 + e2e/runner/runner.go | 6 +- e2e/runner/setup_sui.go | 48 +++++- ...de_solana.go => solana_gateway_upgrade.go} | 0 e2e/runner/sui.go | 3 + e2e/runner/sui_gateway_upgrade.go | 137 ++++++++++++++++++ pkg/contracts/sui/crypto.go | 22 ++- pkg/contracts/sui/crypto_test.go | 28 ++++ 16 files changed, 271 insertions(+), 3 deletions(-) create mode 100644 contrib/localnet/sui/sui_client.yaml create mode 160000 e2e/contracts/sui/protocol-contracts-sui rename e2e/runner/{contract_upgrade_solana.go => solana_gateway_upgrade.go} (100%) create mode 100644 e2e/runner/sui_gateway_upgrade.go diff --git a/cmd/zetae2e/config/config.go b/cmd/zetae2e/config/config.go index 93ba238af6..e131c141a8 100644 --- a/cmd/zetae2e/config/config.go +++ b/cmd/zetae2e/config/config.go @@ -63,6 +63,7 @@ func ExportContractsFromRunner(r *runner.E2ERunner, conf config.Config) config.C conf.Contracts.Sui.GatewayPackageID = config.DoubleQuotedString(r.SuiGateway.PackageID()) conf.Contracts.Sui.GatewayObjectID = config.DoubleQuotedString(r.SuiGateway.ObjectID()) } + conf.Contracts.Sui.GatewayUpgradeCap = config.DoubleQuotedString(r.SuiGatewayUpgradeCap) conf.Contracts.Sui.FungibleTokenCoinType = config.DoubleQuotedString(r.SuiTokenCoinType) conf.Contracts.Sui.FungibleTokenTreasuryCap = config.DoubleQuotedString(r.SuiTokenTreasuryCap) diff --git a/cmd/zetae2e/config/contracts.go b/cmd/zetae2e/config/contracts.go index 5cf108cd1a..4570f26b62 100644 --- a/cmd/zetae2e/config/contracts.go +++ b/cmd/zetae2e/config/contracts.go @@ -130,6 +130,9 @@ func setContractsFromConfig(r *runner.E2ERunner, conf config.Config) error { if suiPackageID != "" && suiGatewayID != "" { r.SuiGateway = sui.NewGateway(suiPackageID.String(), suiGatewayID.String()) } + if c := conf.Contracts.Sui.GatewayUpgradeCap; c != "" { + r.SuiGatewayUpgradeCap = c.String() + } if c := conf.Contracts.Sui.FungibleTokenCoinType; c != "" { r.SuiTokenCoinType = c.String() } diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index 5ed27af438..b493ea6678 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -623,6 +623,10 @@ func localE2ETest(cmd *cobra.Command, _ []string) { ) } + if testSui { + deployerRunner.VerifySuiGatewayPackageUpgrade() + } + if testTSSMigration { TSSMigration(deployerRunner, logger, verbose, conf) } diff --git a/contrib/localnet/orchestrator/Dockerfile.fastbuild b/contrib/localnet/orchestrator/Dockerfile.fastbuild index b6539e94a9..38a9f93526 100644 --- a/contrib/localnet/orchestrator/Dockerfile.fastbuild +++ b/contrib/localnet/orchestrator/Dockerfile.fastbuild @@ -2,16 +2,21 @@ # check=error=true FROM ghcr.io/zeta-chain/ethereum-client-go:v1.10.26 AS geth FROM ghcr.io/zeta-chain/solana-docker:1.18.15 AS solana +FROM ghcr.io/zeta-chain/sui-docker:mainnet-v1.41.1 AS sui FROM zetanode:latest COPY --from=geth /usr/local/bin/geth /usr/local/bin/ COPY --from=solana /usr/bin/solana /usr/local/bin/ +COPY --from=sui /usr/local/bin/sui /usr/local/bin/ COPY contrib/localnet/orchestrator/start-zetae2e.sh /work/ COPY contrib/localnet/orchestrator/proposals_e2e_start/ /work/proposals_e2e_start/ COPY contrib/localnet/orchestrator/proposals_e2e_end/ /work/proposals_e2e_end/ COPY contrib/localnet/scripts/wait-for-ton.sh /work/ +COPY contrib/localnet/sui/sui_client.yaml /work/ +COPY e2e/contracts/sui/protocol-contracts-sui /work/protocol-contracts-sui COPY cmd/zetae2e/config/localnet.yml /work/config.yml + RUN chmod +x /work/*.sh WORKDIR /work diff --git a/contrib/localnet/orchestrator/start-zetae2e.sh b/contrib/localnet/orchestrator/start-zetae2e.sh index 01c64a0145..6dae9b07b1 100644 --- a/contrib/localnet/orchestrator/start-zetae2e.sh +++ b/contrib/localnet/orchestrator/start-zetae2e.sh @@ -183,6 +183,12 @@ if host ton > /dev/null; then ./wait-for-ton.sh fi +# Setup Sui environment +if host sui > /dev/null; then + mkdir -p /root/.sui/sui_config + cp sui_client.yaml /root/.sui/sui_config/client.yaml +fi + [[ -n $CI ]] && echo -e "\n::endgroup::" # need to make the directory if it was not mounted as a volume diff --git a/contrib/localnet/sui/sui_client.yaml b/contrib/localnet/sui/sui_client.yaml new file mode 100644 index 0000000000..14b977eade --- /dev/null +++ b/contrib/localnet/sui/sui_client.yaml @@ -0,0 +1,9 @@ +--- +keystore: + File: /root/.sui/sui_config/sui.keystore +envs: + - alias: localnet + rpc: "http://sui:9000" + ws: ~ + basic_auth: ~ +active_env: localnet diff --git a/e2e/config/config.go b/e2e/config/config.go index e071d4f867..18728018f0 100644 --- a/e2e/config/config.go +++ b/e2e/config/config.go @@ -157,6 +157,7 @@ type SuiExample struct { type Sui struct { GatewayPackageID DoubleQuotedString `yaml:"gateway_package_id"` GatewayObjectID DoubleQuotedString `yaml:"gateway_object_id"` + GatewayUpgradeCap DoubleQuotedString `yaml:"gateway_upgrade_cap"` FungibleTokenCoinType DoubleQuotedString `yaml:"fungible_token_coin_type"` FungibleTokenTreasuryCap DoubleQuotedString `yaml:"fungible_token_treasury_cap"` Example SuiExample `yaml:"example"` diff --git a/e2e/contracts/sui/gateway.mv b/e2e/contracts/sui/gateway.mv index 71af98d9619ca942dfb0f6425d32426e7ae51ef6..65a9832be0240b6e04cca801c88f6b85a116408d 100644 GIT binary patch delta 950 zcmYL|OK%iM5XY;kyJvc)XJ>cD`F%j{(|pmo{%q-$ z@c^KLkWqF;-1(8@YdWKT75|X`v-h{B|BG&VzgNBqpT@V$o0y_U)j$2pU(GoFx9PzM zhSl4$Ip?q)R{<8{8bIpsXZYIubK?Bt0oExbNCmg@P8G^SyaNIjGU|tw<++VSXLQh&X)Ori* z5Pq8kD9q0QRMM~7`YU9n5k?sQ-mZSg zF!&siyos(}EUx*ZFL%|4I`Bv>>!2Y@ClASg@2hR0iFVn5!I{iWQuMusPnQBsh6i@_}J;#P|_~027Ag)+D7ptc&K>(;aJfQ zzfv))?czb$Pu*M{Z}8U3JK~~g@k`h_TjMY)%{!w8xq(9!ymNT&%H#00(88gHI@J%g rs#Ak?TKHy^G!LUxr&bv~Y5Kj4cZeeIB^^S6gykQ=$3kgk+q3W%V}oB~ delta 901 zcmYLHxo#9e5Ur}7p6ThHncW%hWv|`4>tlEAUEkMW8+?H|?SQ}nB7_7PKY)ZRON1n7 zVvry}0+Bf*AR>W?&_BQ-!9PIvAj`qL_v%emcXfBYt^TbXz8?OqTmT3WYE(O5kB-Ut zNjv-4yv!}mxdv9afgKA?&zdb^vF=;km&)LcyyQw=GVcZet2TSr!crIk z41@)M#KP4uGUjwx1egtrMvh>NfHQFs*ii>p5mX`J$yo zC;?ySn}zt^ip2x$A-KJk#Y;0SgL~t~_r^3L6WvMyg;<0EkQeHRf!r{*kefyewLUlm zopPrd)OzK$UbQzoHPUVPWo&CX;lPP+`PEPrA^lu`P+ZBat*<-JLd!4Td-zBbvUuJobO7hNQzQhF4x*^c! zT_Ks45O)&_oSa#}a&`i=Y`#YJ-5VX~r%ahYGjTt46e=sSA+f*OS5U-KB2teC9B2+I zkSIwxic2>YfhSq&D^I$%Ql`q(TA95PosDWifilT)WHu$6VD?bCaL6^Qp<@%`0(s{_ zkpwz0mKFSZ(pQx5G$!9VjficxvkiZ$WNgI}H%&;I1I8UiaV>k|Z*n_5)7dBgDG!XA z%eLelZU!3`vzM}!*jZUBn|AWsFh$+$o2>5^jE!6cv)}& diff --git a/e2e/contracts/sui/protocol-contracts-sui b/e2e/contracts/sui/protocol-contracts-sui new file mode 160000 index 0000000000..b1bd4edde6 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui @@ -0,0 +1 @@ +Subproject commit b1bd4edde62ce4598eaa4d53edb2f17a01742997 diff --git a/e2e/runner/runner.go b/e2e/runner/runner.go index eae03218d1..80d92e138f 100644 --- a/e2e/runner/runner.go +++ b/e2e/runner/runner.go @@ -127,6 +127,9 @@ type E2ERunner struct { // contract Sui SuiGateway *sui.Gateway + // SuiGatewayUpgradeCap is the upgrade cap used for upgrading the Sui gateway package + SuiGatewayUpgradeCap string + // SuiTokenCoinType is the coin type identifying the fungible token for SUI SuiTokenCoinType string @@ -289,6 +292,7 @@ func (r *E2ERunner) CopyAddressesFrom(other *E2ERunner) (err error) { r.TONGateway = other.TONGateway r.SuiGateway = other.SuiGateway + r.SuiGatewayUpgradeCap = other.SuiGatewayUpgradeCap r.SuiTokenCoinType = other.SuiTokenCoinType r.SuiTokenTreasuryCap = other.SuiTokenTreasuryCap r.SuiExample = other.SuiExample @@ -425,6 +429,7 @@ func (r *E2ERunner) PrintContractAddresses() { if r.SuiGateway != nil { r.Logger.Print("GatewayPackageID: %s", r.SuiGateway.PackageID()) r.Logger.Print("GatewayObjectID: %s", r.SuiGateway.ObjectID()) + r.Logger.Print("GatewayUpgradeCap: %s", r.SuiGatewayUpgradeCap) } else { r.Logger.Print("💤 Sui tests disabled") } @@ -436,7 +441,6 @@ func (r *E2ERunner) PrintContractAddresses() { r.Logger.Print("ERC20ZRC20: %s", r.ERC20ZRC20Addr.Hex()) r.Logger.Print("BTCZRC20: %s", r.BTCZRC20Addr.Hex()) r.Logger.Print("SOLZRC20: %s", r.SOLZRC20Addr.Hex()) - r.Logger.Print("SPLZRC20: %s", r.SPLZRC20Addr.Hex()) r.Logger.Print("TONZRC20: %s", r.TONZRC20Addr.Hex()) r.Logger.Print("SUIZRC20: %s", r.SUIZRC20Addr.Hex()) r.Logger.Print("SuiTokenZRC20: %s", r.SuiTokenZRC20Addr.Hex()) diff --git a/e2e/runner/setup_sui.go b/e2e/runner/setup_sui.go index f06cf44018..05b2736b03 100644 --- a/e2e/runner/setup_sui.go +++ b/e2e/runner/setup_sui.go @@ -2,6 +2,7 @@ package runner import ( "fmt" + "os/exec" "strings" "time" @@ -45,6 +46,9 @@ func (r *E2ERunner) SetupSui(faucetURL string) { // fund deployer r.RequestSuiFromFaucet(faucetURL, deployerAddress) + // import deployer private key and select it as active address + r.importAndActivateDeployerAccount() + // fund the TSS // request twice from the faucet to ensure TSS has enough funds for the first withdraw // TODO: this step might no longer necessary if a custom solution is implemented for the TSS funding @@ -54,6 +58,9 @@ func (r *E2ERunner) SetupSui(faucetURL string) { // deploy gateway package whitelistCapID, withdrawCapID := r.suiDeployGateway() + // update gateway package ID in Move.toml + r.updateGatewayPackageIDInMoveToml() + // deploy SUI zrc20 r.deploySUIZRC20() @@ -72,15 +79,51 @@ func (r *E2ERunner) SetupSui(faucetURL string) { require.NoError(r, err) } +// importAndActivateDeployerAccount imports a Sui deployer private key using the sui keytool import command +// and sets the deployer address as the active address. +func (r *E2ERunner) importAndActivateDeployerAccount() { + deployerSigner, err := r.Account.SuiSigner() + require.NoError(r, err, "get deployer signer") + + var ( + deployerAddress = deployerSigner.Address() + deployerPrivKeyHex = r.Account.RawPrivateKey.String() + ) + + // convert private key to bech32 + deployerPrivKeySecp256k1, err := zetasui.PrivateKeyBech32Secp256k1FromHex(deployerPrivKeyHex) + require.NoError(r, err) + + // import deployer private key using sui keytool import + cmdImport := exec.Command("sui", "keytool", "import", deployerPrivKeySecp256k1, "secp256k1") + require.NoError(r, cmdImport.Run(), "unable to import sui deployer private key") + + // switch to deployer address using sui client switch + cmdSwitch := exec.Command("sui", "client", "switch", "--address", deployerAddress) + require.NoError(r, cmdSwitch.Run(), "unable to switch to deployer address") + + // ensure the deployer address is active + cmdList := exec.Command("sui", "client", "active-address") + output, err := cmdList.Output() + require.NoError(r, err) + require.Equal(r, deployerAddress, strings.TrimSpace(string(output))) +} + // suiDeployGateway deploys the SUI gateway package on Sui func (r *E2ERunner) suiDeployGateway() (whitelistCapID, withdrawCapID string) { const ( filterGatewayType = "gateway::Gateway" filterWithdrawCapType = "gateway::WithdrawCap" filterWhitelistCapType = "gateway::WhitelistCap" + filterUpgradeCapType = "0x2::package::UpgradeCap" ) - objectTypeFilters := []string{filterGatewayType, filterWhitelistCapType, filterWithdrawCapType} + objectTypeFilters := []string{ + filterGatewayType, + filterWhitelistCapType, + filterWithdrawCapType, + filterUpgradeCapType, + } packageID, objectIDs := r.suiDeployPackage( []string{suicontract.GatewayBytecodeBase64(), suicontract.EVMBytecodeBase64()}, objectTypeFilters, @@ -95,6 +138,9 @@ func (r *E2ERunner) suiDeployGateway() (whitelistCapID, withdrawCapID string) { withdrawCapID, ok = objectIDs[filterWithdrawCapType] require.True(r, ok, "withdrawCap object not found") + r.SuiGatewayUpgradeCap, ok = objectIDs[filterUpgradeCapType] + require.True(r, ok, "upgradeCap object not found") + // set sui gateway r.SuiGateway = zetasui.NewGateway(packageID, gatewayID) diff --git a/e2e/runner/contract_upgrade_solana.go b/e2e/runner/solana_gateway_upgrade.go similarity index 100% rename from e2e/runner/contract_upgrade_solana.go rename to e2e/runner/solana_gateway_upgrade.go diff --git a/e2e/runner/sui.go b/e2e/runner/sui.go index 8c1a1735dd..67747f3735 100644 --- a/e2e/runner/sui.go +++ b/e2e/runner/sui.go @@ -15,6 +15,7 @@ import ( "github.com/zeta-chain/protocol-contracts/pkg/gatewayzevm.sol" "github.com/zeta-chain/node/pkg/contracts/sui" + "github.com/zeta-chain/node/zetaclient/chains/sui/client" ) const ( @@ -453,9 +454,11 @@ func (r *E2ERunner) suiExecuteTx( resp, err := r.Clients.Sui.SuiExecuteTransactionBlock(r.Ctx, models.SuiExecuteTransactionBlockRequest{ TxBytes: tx.TxBytes, Signature: []string{signature}, + Options: models.SuiTransactionBlockOptions{ShowEffects: true}, RequestType: "WaitForLocalExecution", }) require.NoError(r, err) + require.Equal(r, resp.Effects.Status.Status, client.TxStatusSuccess) return resp } diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go new file mode 100644 index 0000000000..4c7b5a4b51 --- /dev/null +++ b/e2e/runner/sui_gateway_upgrade.go @@ -0,0 +1,137 @@ +package runner + +import ( + "bufio" + "context" + "os" + "os/exec" + "regexp" + "strings" + "time" + + "github.com/block-vision/sui-go-sdk/models" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +const ( + // suiUpgradedGatewayPath is the path to the upgraded Sui gateway package + suiUpgradedGatewayPath = "/work/protocol-contracts-sui" +) + +// reGatewayPackageID is the regex to extract the gateway package ID from the output +// +// │ Published Objects: │ +// │ ┌── │ +// │ │ PackageID: 0x67500cf6e39f3d8937c4f15a298da72358410c84357ee33e0030c13872f5339e │ +// │ │ Version: 2 │ +// │ │ Digest: 9sLQJdSZcQp8jHVJenBGKjipxspLKZ1P4QBnTxffA4Gb │ +// │ │ Modules: evm, gateway │ +// │ └── │ +// ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ +var reGatewayPackageID = regexp.MustCompile(`│\s*PackageID: *(0x[0-9a-fA-F]+)\s*│`) + +// VerifySuiGatewayPackageUpgrade upgrades the Sui gateway package and verifies the upgrade +func (r *E2ERunner) VerifySuiGatewayPackageUpgrade() { + // retrieve original gateway object data + gatewayDataBefore, err := r.getObjectData(r.Ctx, r.SuiGateway.ObjectID()) + require.NoError(r, err) + + // upgrade the Sui gateway package + newGatewayPackageID, err := r.upgradeSuiGatewayPackage() + require.NoError(r, err) + + // call the new method 'upgraded' in the new gateway package + r.moveCallUpgraded(r.Ctx, newGatewayPackageID) + + // retrieve new gateway object data + gatewayDataAfter, err := r.getObjectData(r.Ctx, r.SuiGateway.ObjectID()) + require.NoError(r, err) + + // gateway data should remain unchanged + require.Equal(r, gatewayDataBefore, gatewayDataAfter) +} + +// upgradeSuiGatewayPackage upgrades the Sui gateway package by deploying new compiled gateway package +func (r *E2ERunner) upgradeSuiGatewayPackage() (string, error) { + // construct the CLI command for package upgrade + cmdUpgrade := exec.Command("sui", []string{ + "client", + "upgrade", + "--skip-dependency-verification", + "--upgrade-capability", + r.SuiGatewayUpgradeCap, + }...) + cmdUpgrade.Dir = suiUpgradedGatewayPath + + // run command and show output + startTime := time.Now() + output, err := cmdUpgrade.Output() + require.NoError(r, err) + + r.Logger.Info("sui gateway package upgrade took %f seconds: \n%s", time.Since(startTime).Seconds(), string(output)) + + // scan through the output line by line to find the new gateway package ID + scanner := bufio.NewScanner(strings.NewReader(string(output))) + for scanner.Scan() { + line := scanner.Text() + matches := reGatewayPackageID.FindStringSubmatch(line) + if len(matches) >= 2 { + // return the first capture group which contains the PackageID + return matches[1], nil + } + } + + return "", errors.New("new gateway package ID not found") +} + +// moveCallUpgraded performs a move call to 'upgraded' method on the new Sui gateway package +func (r *E2ERunner) moveCallUpgraded(ctx context.Context, gatewayPackageID string) { + signer, err := r.Account.SuiSigner() + require.NoError(r, err, "unable to get deployer signer") + + tx, err := r.Clients.Sui.MoveCall(ctx, models.MoveCallRequest{ + Signer: signer.Address(), + PackageObjectId: gatewayPackageID, + Module: r.SuiGateway.Module(), + Function: "upgraded", + TypeArguments: []any{}, + Arguments: []any{}, + GasBudget: "5000000000", + }) + require.NoError(r, err) + + r.suiExecuteTx(signer, tx) +} + +// updateGatewayPackageIDInMoveToml updates the 'published-at' field in the 'Move.toml' file +// with the original published gateway package ID +func (r *E2ERunner) updateGatewayPackageIDInMoveToml() { + const moveTomlPath = suiUpgradedGatewayPath + "/Move.toml" + + // read the entire Move.toml file + content, err := os.ReadFile(moveTomlPath) + require.NoError(r, err, "unable to read Move.toml") + contentStr := string(content) + + // Replace the placeholder with the actual published gateway package ID + publishedAt := r.SuiGateway.PackageID() + updatedContent := strings.Replace(contentStr, "ORIGINAL-PACKAGE-ID", publishedAt, 1) + + // Write the updated content back to the file + err = os.WriteFile(moveTomlPath, []byte(updatedContent), 0644) + require.NoError(r, err, "unable to write to Move.toml") +} + +// getObjectData retrieves the object data from the Sui gateway package +func (r *E2ERunner) getObjectData(ctx context.Context, objectID string) (models.SuiParsedData, error) { + object, err := r.Clients.Sui.SuiGetObject(ctx, models.SuiGetObjectRequest{ + ObjectId: objectID, + Options: models.SuiObjectDataOptions{ShowContent: true}, + }) + require.NoError(r, err) + require.NotNil(r, object.Data) + require.NotNil(r, object.Data.Content) + + return *object.Data.Content, nil +} diff --git a/pkg/contracts/sui/crypto.go b/pkg/contracts/sui/crypto.go index c9f9eb67f3..7c6605b4e6 100644 --- a/pkg/contracts/sui/crypto.go +++ b/pkg/contracts/sui/crypto.go @@ -8,6 +8,7 @@ import ( "encoding/hex" "github.com/block-vision/sui-go-sdk/models" + "github.com/cosmos/cosmos-sdk/types/bech32" "github.com/decred/dcrd/dcrec/secp256k1/v4" secp256k1signer "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" "github.com/ethereum/go-ethereum/crypto" @@ -15,7 +16,13 @@ import ( "golang.org/x/crypto/blake2b" ) -const flagSecp256k1 = 0x01 +const ( + // flagSecp256k1 is the flag to indicate secp256k1 key scheme. + flagSecp256k1 = 0x01 + + // suiPrivateKeyPrefix is the prefix for Sui private key string. + suiPrivateKeyPrefix = "suiprivkey" +) // Digest calculates tx digest (hash) for further signing by TSS. func Digest(tx models.TxnMetaData) ([32]byte, error) { @@ -125,6 +132,19 @@ func DeserializeSignatureECDSA(sigBase64 string) (*ecdsa.PublicKey, [64]byte, er return pk, sig, nil } +// PrivateKeyBech32Secp256k1FromHex converts private key in hex into bech32 format using secp256k1 scheme. +func PrivateKeyBech32Secp256k1FromHex(privKeyHex string) (string, error) { + privKeyBytes, err := hex.DecodeString(privKeyHex) + if err != nil { + return "", errors.Wrap(err, "failed to decode private key hex") + } + + // add secp256k1 flag + privKeyBytes = append([]byte{flagSecp256k1}, privKeyBytes...) + + return bech32.ConvertAndEncode(suiPrivateKeyPrefix, privKeyBytes) +} + // SignerSecp256k1 represents Sui Secp256k1 signer. type SignerSecp256k1 struct { pk *secp256k1.PrivateKey diff --git a/pkg/contracts/sui/crypto_test.go b/pkg/contracts/sui/crypto_test.go index 34a471b78f..212e32a1fe 100644 --- a/pkg/contracts/sui/crypto_test.go +++ b/pkg/contracts/sui/crypto_test.go @@ -111,6 +111,34 @@ func TestCrypto(t *testing.T) { assert.Equal(t, signature[:64], signature2[:]) }) + t.Run("PrivateKeySecp256k1FromHex", func(t *testing.T) { + for _, tt := range []struct { + privKeyHex string + privKeyBech32Secp256k1 string + errMsg string + }{ + { + privKeyHex: "d87baf7bf6dc560a252596678c12e41f7d1682837f05b29d411bc3f78ae2c263", + privKeyBech32Secp256k1: "suiprivkey1q8v8htmm7mw9vz39yktx0rqjus0h695zsdlstv5agydu8au2utpxxgjwf3h", + }, + { + privKeyHex: "invalid", + errMsg: "failed to decode private key hex", + }, + } { + t.Run(tt.privKeyHex, func(t *testing.T) { + privKey, err := PrivateKeyBech32Secp256k1FromHex(tt.privKeyHex) + if tt.errMsg != "" { + require.Empty(t, privKey) + require.Contains(t, err.Error(), tt.errMsg) + } else { + require.NoError(t, err) + require.Equal(t, tt.privKeyBech32Secp256k1, privKey) + } + }) + } + }) + t.Run("SignerSecp256k1", func(t *testing.T) { for _, tt := range []struct { privKey string From c9ec5a42723eaff68cd68d6310bbc67d92420a49 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Mon, 12 May 2025 23:51:27 -0500 Subject: [PATCH 02/13] add changelog entry --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 34ddae3017..179195e6d8 100644 --- a/changelog.md +++ b/changelog.md @@ -51,6 +51,7 @@ * [3692](https://github.com/zeta-chain/node/pull/3692) - e2e staking test for `MsgUndelegate` tx, to test observer staking hooks * [3831](https://github.com/zeta-chain/node/pull/3831) - e2e tests for sui fungible token withdraw and call * [3582](https://github.com/zeta-chain/node/pull/3852) - add solana to tss migration e2e tests +* [3866](https://github.com/zeta-chain/node/pull/3866) - add e2e test for upgrading sui gateway package ### Refactor From c128bb3855e8374da53b055f60847bfdc757804b Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 11:55:44 -0500 Subject: [PATCH 03/13] rename protocol contracts sui folder to indicate its purpose --- cmd/zetae2e/local/local.go | 28 +- .../orchestrator/Dockerfile.fastbuild | 2 +- e2e/contracts/sui/protocol-contracts-sui | 1 - .../protocol-contracts-sui-upgrade/.gitignore | 8 + .../protocol-contracts-sui-upgrade/Move.lock | 34 ++ .../protocol-contracts-sui-upgrade/Move.toml | 38 ++ .../protocol-contracts-sui-upgrade/README.md | 4 + .../build/gateway/BuildInfo.yaml | 72 +++ .../dependencies/MoveStdlib/address.mv | Bin 0 -> 101 bytes .../dependencies/MoveStdlib/ascii.mv | Bin 0 -> 1846 bytes .../dependencies/MoveStdlib/bcs.mv | Bin 0 -> 92 bytes .../dependencies/MoveStdlib/bit_vector.mv | Bin 0 -> 802 bytes .../dependencies/MoveStdlib/bool.mv | Bin 0 -> 58 bytes .../dependencies/MoveStdlib/debug.mv | Bin 0 -> 116 bytes .../dependencies/MoveStdlib/fixed_point32.mv | Bin 0 -> 598 bytes .../dependencies/MoveStdlib/hash.mv | Bin 0 -> 106 bytes .../dependencies/MoveStdlib/macros.mv | Bin 0 -> 60 bytes .../dependencies/MoveStdlib/option.mv | Bin 0 -> 1136 bytes .../dependencies/MoveStdlib/string.mv | Bin 0 -> 1064 bytes .../dependencies/MoveStdlib/type_name.mv | Bin 0 -> 1144 bytes .../dependencies/MoveStdlib/u128.mv | Bin 0 -> 1286 bytes .../dependencies/MoveStdlib/u16.mv | Bin 0 -> 818 bytes .../dependencies/MoveStdlib/u256.mv | Bin 0 -> 1400 bytes .../dependencies/MoveStdlib/u32.mv | Bin 0 -> 919 bytes .../dependencies/MoveStdlib/u64.mv | Bin 0 -> 1060 bytes .../dependencies/MoveStdlib/u8.mv | Bin 0 -> 674 bytes .../dependencies/MoveStdlib/uq32_32.mv | Bin 0 -> 1233 bytes .../dependencies/MoveStdlib/uq64_64.mv | Bin 0 -> 1337 bytes .../dependencies/MoveStdlib/vector.mv | Bin 0 -> 1232 bytes .../dependencies/Sui/address.mv | Bin 0 -> 763 bytes .../dependencies/Sui/authenticator_state.mv | Bin 0 -> 3000 bytes .../bytecode_modules/dependencies/Sui/bag.mv | Bin 0 -> 748 bytes .../dependencies/Sui/balance.mv | Bin 0 -> 1221 bytes .../bytecode_modules/dependencies/Sui/bcs.mv | Bin 0 -> 3108 bytes .../dependencies/Sui/bls12381.mv | Bin 0 -> 3781 bytes .../dependencies/Sui/borrow.mv | Bin 0 -> 638 bytes .../dependencies/Sui/clock.mv | Bin 0 -> 418 bytes .../bytecode_modules/dependencies/Sui/coin.mv | Bin 0 -> 4173 bytes .../dependencies/Sui/config.mv | Bin 0 -> 1969 bytes .../dependencies/Sui/deny_list.mv | Bin 0 -> 4815 bytes .../dependencies/Sui/display.mv | Bin 0 -> 1378 bytes .../dependencies/Sui/dynamic_field.mv | Bin 0 -> 1309 bytes .../dependencies/Sui/dynamic_object_field.mv | Bin 0 -> 1381 bytes .../dependencies/Sui/ecdsa_k1.mv | Bin 0 -> 222 bytes .../dependencies/Sui/ecdsa_r1.mv | Bin 0 -> 180 bytes .../dependencies/Sui/ecvrf.mv | Bin 0 -> 138 bytes .../dependencies/Sui/ed25519.mv | Bin 0 -> 106 bytes .../dependencies/Sui/event.mv | Bin 0 -> 87 bytes .../dependencies/Sui/groth16.mv | Bin 0 -> 902 bytes .../dependencies/Sui/group_ops.mv | Bin 0 -> 1597 bytes .../bytecode_modules/dependencies/Sui/hash.mv | Bin 0 -> 113 bytes .../bytecode_modules/dependencies/Sui/hex.mv | Bin 0 -> 1322 bytes .../bytecode_modules/dependencies/Sui/hmac.mv | Bin 0 -> 100 bytes .../dependencies/Sui/kiosk.mv | Bin 0 -> 4293 bytes .../dependencies/Sui/kiosk_extension.mv | Bin 0 -> 1507 bytes .../dependencies/Sui/linked_table.mv | Bin 0 -> 1681 bytes .../bytecode_modules/dependencies/Sui/math.mv | Bin 0 -> 334 bytes .../dependencies/Sui/nitro_attestation.mv | Bin 0 -> 680 bytes .../dependencies/Sui/object.mv | Bin 0 -> 1346 bytes .../dependencies/Sui/object_bag.mv | Bin 0 -> 873 bytes .../dependencies/Sui/object_table.mv | Bin 0 -> 863 bytes .../dependencies/Sui/package.mv | Bin 0 -> 1809 bytes .../bytecode_modules/dependencies/Sui/pay.mv | Bin 0 -> 835 bytes .../dependencies/Sui/poseidon.mv | Bin 0 -> 404 bytes .../dependencies/Sui/priority_queue.mv | Bin 0 -> 1259 bytes .../dependencies/Sui/prover.mv | Bin 0 -> 60 bytes .../dependencies/Sui/random.mv | Bin 0 -> 4287 bytes .../bytecode_modules/dependencies/Sui/sui.mv | Bin 0 -> 856 bytes .../dependencies/Sui/table.mv | Bin 0 -> 770 bytes .../dependencies/Sui/table_vec.mv | Bin 0 -> 1048 bytes .../dependencies/Sui/token.mv | Bin 0 -> 4516 bytes .../dependencies/Sui/transfer.mv | Bin 0 -> 706 bytes .../dependencies/Sui/transfer_policy.mv | Bin 0 -> 2529 bytes .../dependencies/Sui/tx_context.mv | Bin 0 -> 730 bytes .../dependencies/Sui/types.mv | Bin 0 -> 104 bytes .../bytecode_modules/dependencies/Sui/url.mv | Bin 0 -> 298 bytes .../bytecode_modules/dependencies/Sui/vdf.mv | Bin 0 -> 226 bytes .../dependencies/Sui/vec_map.mv | Bin 0 -> 1841 bytes .../dependencies/Sui/vec_set.mv | Bin 0 -> 909 bytes .../dependencies/Sui/versioned.mv | Bin 0 -> 766 bytes .../dependencies/Sui/zklogin_verified_id.mv | Bin 0 -> 584 bytes .../Sui/zklogin_verified_issuer.mv | Bin 0 -> 602 bytes .../build/gateway/bytecode_modules/evm.mv | Bin 0 -> 515 bytes .../build/gateway/bytecode_modules/gateway.mv | Bin 0 -> 3004 bytes .../build/gateway/sources/evm.move | 46 ++ .../build/gateway/sources/gateway.move | 417 ++++++++++++++++++ .../package.json | 10 + .../sources/evm.move | 46 ++ .../sources/gateway.move | 417 ++++++++++++++++++ e2e/runner/sui_gateway_upgrade.go | 8 +- 90 files changed, 1111 insertions(+), 20 deletions(-) delete mode 160000 e2e/contracts/sui/protocol-contracts-sui create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.toml create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/ascii.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bool.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/debug.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/hash.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/macros.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/option.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/type_name.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u128.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u256.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u32.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u64.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq32_32.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/vector.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bag.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/balance.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bcs.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bls12381.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/coin.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/config.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/display.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_field.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_r1.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ed25519.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/event.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hmac.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk_extension.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/linked_table.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table_vec.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/tx_context.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/url.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_map.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_id.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/evm.move create mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/gateway.move diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index b1a18018a4..c676a8edca 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -518,20 +518,20 @@ func localE2ETest(cmd *cobra.Command, _ []string) { if testSui { suiTests := []string{ e2etests.TestSuiDepositName, - e2etests.TestSuiDepositAndCallRevertName, - e2etests.TestSuiDepositAndCallName, - e2etests.TestSuiTokenDepositName, - e2etests.TestSuiTokenDepositAndCallName, - e2etests.TestSuiTokenDepositAndCallRevertName, - e2etests.TestSuiWithdrawName, - e2etests.TestSuiWithdrawAndCallName, - e2etests.TestSuiWithdrawRevertWithCallName, - e2etests.TestSuiWithdrawAndCallRevertWithCallName, - e2etests.TestSuiTokenWithdrawName, - e2etests.TestSuiTokenWithdrawAndCallName, - e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, - e2etests.TestSuiDepositRestrictedName, - e2etests.TestSuiWithdrawRestrictedName, + // e2etests.TestSuiDepositAndCallRevertName, + // e2etests.TestSuiDepositAndCallName, + // e2etests.TestSuiTokenDepositName, + // e2etests.TestSuiTokenDepositAndCallName, + // e2etests.TestSuiTokenDepositAndCallRevertName, + // e2etests.TestSuiWithdrawName, + // e2etests.TestSuiWithdrawAndCallName, + // e2etests.TestSuiWithdrawRevertWithCallName, + // e2etests.TestSuiWithdrawAndCallRevertWithCallName, + // e2etests.TestSuiTokenWithdrawName, + // e2etests.TestSuiTokenWithdrawAndCallName, + // e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, + // e2etests.TestSuiDepositRestrictedName, + // e2etests.TestSuiWithdrawRestrictedName, } eg.Go(suiTestRoutine(conf, deployerRunner, verbose, suiTests...)) } diff --git a/contrib/localnet/orchestrator/Dockerfile.fastbuild b/contrib/localnet/orchestrator/Dockerfile.fastbuild index 38a9f93526..cd19ece2fd 100644 --- a/contrib/localnet/orchestrator/Dockerfile.fastbuild +++ b/contrib/localnet/orchestrator/Dockerfile.fastbuild @@ -14,7 +14,7 @@ COPY contrib/localnet/orchestrator/proposals_e2e_start/ /work/proposals_e2e_star COPY contrib/localnet/orchestrator/proposals_e2e_end/ /work/proposals_e2e_end/ COPY contrib/localnet/scripts/wait-for-ton.sh /work/ COPY contrib/localnet/sui/sui_client.yaml /work/ -COPY e2e/contracts/sui/protocol-contracts-sui /work/protocol-contracts-sui +COPY e2e/contracts/sui/protocol-contracts-sui-upgrade /work/protocol-contracts-sui-upgrade COPY cmd/zetae2e/config/localnet.yml /work/config.yml RUN chmod +x /work/*.sh diff --git a/e2e/contracts/sui/protocol-contracts-sui b/e2e/contracts/sui/protocol-contracts-sui deleted file mode 160000 index b1bd4edde6..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b1bd4edde62ce4598eaa4d53edb2f17a01742997 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore b/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore new file mode 100644 index 0000000000..9e738f4a8c --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore @@ -0,0 +1,8 @@ +.idea +.vscode + +source/dependencies +build/locks +build/gateway/debug_info +*.key +.DS_Store diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock b/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock new file mode 100644 index 0000000000..6f574549b8 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock @@ -0,0 +1,34 @@ +# @generated by Move, please check-in and do not edit manually. + +[move] +version = 3 +manifest_digest = "0266218E4DE09052BDA9E3B2109A20DE896078087CD0A32CB0EEEE34BE635FFE" +deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" +dependencies = [ + { id = "Sui", name = "Sui" }, +] + +[[move.package]] +id = "MoveStdlib" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } + +[[move.package]] +id = "Sui" +source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } + +dependencies = [ + { id = "MoveStdlib", name = "MoveStdlib" }, +] + +[move.toolchain-version] +compiler-version = "1.47.0" +edition = "2024.beta" +flavor = "sui" + +[env] + +[env.testnet] +chain-id = "4c78adac" +original-published-id = "0x6b2fe12c605d64e14ca69f9aba51550593ba92ff43376d0a6cc26a5ca226f9bd" +latest-published-id = "0x6b2fe12c605d64e14ca69f9aba51550593ba92ff43376d0a6cc26a5ca226f9bd" +published-version = "1" diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.toml b/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.toml new file mode 100644 index 0000000000..93b3682d01 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.toml @@ -0,0 +1,38 @@ +[package] +name = "gateway" +edition = "2024.beta" # edition = "legacy" to use legacy (pre-2024) Move +published-at = "ORIGINAL-PACKAGE-ID" +# license = "" # e.g., "MIT", "GPL", "Apache 2.0" +# authors = ["..."] # e.g., ["Joe Smith (joesmith@noemail.com)", "John Snow (johnsnow@noemail.com)"] + +[dependencies] +Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } + +# For remote import, use the `{ git = "...", subdir = "...", rev = "..." }`. +# Revision can be a branch, a tag, and a commit hash. +# MyRemotePackage = { git = "https://some.remote/host.git", subdir = "remote/path", rev = "main" } + +# For local dependencies use `local = path`. Path is relative to the package root +# Local = { local = "../path/to" } + +# To resolve a version conflict and force a specific version for dependency +# override use `override = true` +# Override = { local = "../conflicting/version", override = true } + +[addresses] +gateway = "0x0" + +# Named addresses will be accessible in Move as `@name`. They're also exported: +# for example, `std = "0x1"` is exported by the Standard Library. +# alice = "0xA11CE" + +[dev-dependencies] +# The dev-dependencies section allows overriding dependencies for `--test` and +# `--dev` modes. You can introduce test-only dependencies here. +# Local = { local = "../path/to/dev-build" } + +[dev-addresses] +# The dev-addresses section allows overwriting named addresses for the `--test` +# and `--dev` modes. +# alice = "0xB0B" + diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md b/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md new file mode 100644 index 0000000000..03d7d95305 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md @@ -0,0 +1,4 @@ +# Zetachain x Sui Gateway + +This package is only used for gateway upgrade test + diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml new file mode 100644 index 0000000000..db7bb8367c --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml @@ -0,0 +1,72 @@ +--- +compiled_package_info: + package_name: gateway + address_alias_instantiation: + gateway: "0000000000000000000000000000000000000000000000000000000000000000" + std: "0000000000000000000000000000000000000000000000000000000000000001" + sui: "0000000000000000000000000000000000000000000000000000000000000002" + source_digest: EAC151C24C640EFC455F2830BC1A86331726D5FBC573DB7EF9D414EC1CD7458C + build_flags: + dev_mode: false + test_mode: false + generate_docs: false + save_disassembly: false + install_dir: ~ + force_recompilation: false + lock_file: "./Move.lock" + fetch_deps_only: false + skip_fetch_latest_git_deps: false + default_flavor: sui + default_edition: ~ + deps_as_root: false + silence_warnings: false + warnings_are_errors: false + json_errors: false + additional_named_addresses: {} + lint_flag: + no_lint: false + lint: false + implicit_dependencies: + Bridge: + Internal: + kind: + Git: + git_url: "https://github.com/MystenLabs/sui.git" + git_rev: fbb68879cbd1 + subdir: crates/sui-framework/packages/bridge + subst: ~ + digest: ~ + dep_override: true + MoveStdlib: + Internal: + kind: + Git: + git_url: "https://github.com/MystenLabs/sui.git" + git_rev: fbb68879cbd1 + subdir: crates/sui-framework/packages/move-stdlib + subst: ~ + digest: ~ + dep_override: true + Sui: + Internal: + kind: + Git: + git_url: "https://github.com/MystenLabs/sui.git" + git_rev: fbb68879cbd1 + subdir: crates/sui-framework/packages/sui-framework + subst: ~ + digest: ~ + dep_override: true + SuiSystem: + Internal: + kind: + Git: + git_url: "https://github.com/MystenLabs/sui.git" + git_rev: fbb68879cbd1 + subdir: crates/sui-framework/packages/sui-system + subst: ~ + digest: ~ + dep_override: true +dependencies: + - MoveStdlib + - Sui diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv new file mode 100644 index 0000000000000000000000000000000000000000..678d49de9c1b9770c8be87fc61b5667c3ea4ed43 GIT binary patch literal 101 zcmZ1|^O~EDfq{XIk%5VsiItU|nVpNDLsEgqQUEB*2!srb%b$`GAr#D38nT#;G?0?JZN6z&x z{1e+h#IGXxP9K<`^|t#>`|!K|A<6#A6d4-O0}>XImY6L=NeOaSNTPRzB9a>WZrg-t zE5$-zJ0j&V%>%?<20yKHq75mqN!*}^ZK;T&6Jy`eaM_O{+d!;`2Vo=*MVE=Y9Rs0ExALxv_~vBVRn$jzLf?V3#5n$#=x?jkc2MrV_ix% zP6%kx*&q(bT*;KITx}$!gp-lHQiOFW;nz|~>4c2a6np?14%iQ?KtjZ7J;pkrW3&`3 z)JK<-rTJ{pOsl#1yjf1?FSaMM+4vmh$$3*Q>+u4{W^y(w&1A7C=NHMO9-mz|WvwUm z`E;tHu3LkOQAHHvrW((x*X8njQkS=uE5x^!a8cIHvbrAE)yp!O&M(S0LI%K3}tQq8M*X{z>A$)Z}cYw6;u zzHBuW0}V33Y18`ZY^8hjP3C+AEThLLGj60?p8xH5TO+? z3brCzlhjd>DW#32N1nP^fK>%gg$SJUh?Lc7T;mao7~lIKr(m5up}=U{)fcqqV4Qa5 zNF6vGl(Sx)QoqO!)SkDT2BF{c8cn+T20`l-_9O@|)MEhCNCc^$jAW1=jReO&^63zE zHUETCfYMGmeWVVZ3ep)bBUFB%_PuGLhF+~fDeYiyp@hQ5iS@KWId{1KjL?X%=xBK! zk00X_h2y&uT=+OKam{n#M@oQ78a#3A=xJewpvHS#C4S^Z;e*X1DRP|@`IeOTo#xCw zComItQ;tXa9v_?7%G-}`7($`qJF@*Dz{F5FCr~Ie1VM<%{G9Y!x8&LC%?m_KDDAgt5;sIskS>Q=*)gGbnH!6!Ps-WZeo1w^|o6OPi!9$h8 z^z|^X_Gw_xV&lfILn9+PnCzmcg$pUNv+!{ae6BZ)K@}5cTymryI)j2buTMcwW^p>z zFM8+<=><|ZYo#IhVAb5Fc@6)@A%2)))1rm;p8GEqnnIoM>IJBbE zTSN89U4U9O>Qnt7Rs$YtfPy%N9`DB??!|Gu9LKl@qkCPui#E}R>huOcf{-;Tq`pJ$ rp=tI9sLTYF!SK~xWsn~Vwgrg3r+C{$|E=@M%K3}?&Vx1Q_7V9T;s>+C literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv new file mode 100644 index 0000000000000000000000000000000000000000..3c0aa2c6c57104ed33b9b34f5edb53cf3835682b GIT binary patch literal 92 zcmZ1|^O~EDfq{XIk%5VsiH((mot>YTLq>teh6O0f$iN6hY@7^?TujVK$;BKc`SD4W QC8@RT<^b-};XZr3& zKZSt+a)1obPI3Tc+KRL}764961_N|h0ObWZpv-new1d>@IdYE9xpJ?I2jM85o|SL9 z*iO4JKh~7JABt7CXuJM6d~6pXX7kX`;>l!w+Rwrwrjo69=b=9e?IIqY#jc;Vhtc)n zgR@IroOILJ&cigyd2a=i^{+rzK$^|M6=uX`HY8R9n`ww-5t>)YfZJ+LT*Ms~$#dLQ z$X&ygT(kW0vZAME&N3=gQfPQ$+S0aoPeWn z3l0HxXp4{#UzYviy!Y(?{Id9A0sx2bpr>JY8vVX3%l`-#RxTQ@RZDG zN(?qpIb&I>7(Vr?R$0r0=EO;N;YKH#0mk&d^m80E>9Biiqr5Z+zMvMl+0zMoK0q)V4Fm{bf9S{}i3Bu==Qi=DYsNYc`zWoW2r==gab z9)XS*fL-}6976_;wZEU%tKHSdhd;alfB}LgZIrv#Z?Q<;;Vq^g=sVhS0Hnz03qWQg5}GT`bP%adL`G$pszj(u2^C}(Shg84rOYuM zTahPLBBY*>z@S(X6yy|h=DOf$=m$beV#|caG$KX7cp`QIX7Mw`B; zoAZlsld>QIg-a|gis@p4*=pXNEt=4^I=WU@vx{6v-7RYgYeHAQX^s_d!#i|K?)3i_ zDhr?^LRp@u9!t2xRRL}f>*@(@B0T1nZ;+fz9 zb5JR*6U*gKaZjK!$#Fd;l35#0#F{IoD%9R9^q5mJ@`zq-VRQ0CGREcjK79EXcpA}s zI~bK74j?B-`yAdTIZtg0d!9T#C(712?sJk!l5LVafFmNAcPJeESnm^y0389%;x}aEvwF2_v`XxPK5-il1M}A-7*f;5R4id5{1A literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv new file mode 100644 index 0000000000000000000000000000000000000000..3c62e43ecc6ccd92292a1f3a8f6c34d31767b228 GIT binary patch literal 1064 zcmaJ=OLEjO5N)+SmMzbW70)M0K|xU!vY}Y8nr%+Nf&;iF6DM(z*i*JcF-z90fhBMg z4#A2mu;B|e=7*Xl zKb1*;sn2rsCt{kCrUN=A5s|>p6bbk^B4EUTgc6!yVt4a@Ya@jVw#h|cNeNnzInoCpF zUD@_|Rrh6EuWpLJzL=k)sI;HlyiMGD?eL?a&>byyXPT`Ktu% zR3#!&XZeX5If#CoO6{EzaVniuQ+?>r8{#yfmp)1(Orghy0kTUCG)}k(q8=H?-U79^ z&N!MedXW|{LQ)8WAgNB+=@a!BG5JItCqqQFz|2GBCkU(W0SP?Q&yfrga0+4APjGLc l%VPM?aGH#K#v`=S828S%5XX0BKfSy5-Q|)%flv&H4^g0m5JhxE&{6;;l6A>hho#FovVDp20K7$n zl!k_eh5{lA8XkgI;3b&7B$g#mBv#rF|8~~@nc3OX8^4`mj9Fj`mEp;z+P%Illl4vZPL8)gm%qk0w`0AA;bn4Af+DZgKqCT zIM!zaR2)b$L%GK5@MyNk!J>vF>^A;>4$7+TqWP3UwUXUGaq+ zzx-l5W?4fjJ_kloFIr%jicf)Ihmq4C1EW%I?L;b01Eb1r83la;Zm6i9Tc%R)1eXV~_Ls!A~0kK!Omf*yz?NWv$?P9R0wr7=O}_!Y?{; z-}Sc;+7N?>4nl+g3L`cg2m!Ak6r;tEm_+V4{y_^gKnet~1_3}5_^<{%9oH*@zLG_ue&q)3trub$loFNQ(GUXaOtZ#cPPs$Pt=|v@mH(sS=15TmqPYY&r4PCgEv0%_r~do4mZvXW3{{lr+xI&)ehtDj#Q~v&ncg zE#_?Jm-^!DgTBZoG$|%oSXA-)vbc_>*;O{3Wi%@;*u0;X;jGG(Hs$#+yvp8|#Z(^YKL!`1@Q|wl;43BzgPYoTsE}_ZsRgGk zIx^bO9$BlM3cMw!tl}JXVz)-ft4`X>IlR@DdYqiV}SmB=lQ z>{QNxgO*0O$|a3v_Boeg-FgL*Qu=s6yMbj#ZT4ZCwhW8d-~is(ayket8D6uzKK2%C zC9P|ph{Wehhw`GX!{G{250SH8v6TOlJM=hc7}jI3dqCTwjJ+O6vFfRk&(F#GQ$`JLY6A8s83L2us-qz~w5a$afweon79hM@@GpkC;`y%tT7USP zr3m3^!M_{^6>pedzt2m@-O3U^T=2)ksNya2-935WM*pQ5Oa#paN9;t%6|NFH^w6up g;q3vxX9i7eYqNXwjC*orUmC%AHH@v2gZK%-FL4@yumAu6 literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv new file mode 100644 index 0000000000000000000000000000000000000000..4c3b8e186d87dce3586a976d7e7b514f93ab32fc GIT binary patch literal 818 zcmaJ<&2AGh5S|%(y}SNNXe$y@QHi!`4@gLjDxqAs^$-LS2P95NQ6O8ihwi4EO$u+o zD{$7r?Sh(H zYrW+l0Ylgk3ujC!grJboolfXT%myrA&f`!STO=%susNAGi?*yQ^R{iu>XZ9Wwm0Rn zm{xVG=jG+)-n?9w^I|%y=F_HL!LAnSYW7)Om6fjQsxbAIuNL)9+7#=eSr&R(U%^~A ztyykW^R}M;@tQBw*>buXtJUbaUbUBFvo1cibrakD&xdk_&rmZFMxq@}Hk$)s1g7iA zE5}}2W%W=yr@SP=X)jK|x{o-%hlmGn_WsofPC4C&%#PDe!GTh|8`J+AH<%C|>TbmD z1N(66OqhCGe7xH91b9Jh3h7wjh)?x#;^4?&1oFOx^dmr!*!LAkS$t?W~*e=f_McUfGdx{ zjVn*XfrltFyJ{#akzlRHV|#vod%WYXkA9gD01|{)#9D5jtE?A%dLRA7Zy0}(Pr~mq zu|MSJ2s#jhg)Tyb00JX21VTU~2-!$BicP{R+aLivD1a>p0NOzNw16;2LKr121T>zk z*crqi^^neBopZMB+P335w(GjK@A}@M7oI+W2Cy=Yy%rnEMq!K~z4wx%ILOy=319*| z;XFF-TOM27OOKL!g^NlsDT_(%nR5Pd zanyCgsp zLo0*OC{1HZXN3KFEci88zCNMF_-^gF01i}=fgMuH}){5UCz`UsWm#M6H zdJVAshre5^z`UyYS7}i3^bld^AKQA`8wJmZzq=>eZ{K>hhO+*FGkqj474Wnf0lC?V|Eo@|8bx`c3Y~-z5vz z^2ySWQp#zADPbbv1O|l^;Y6_-qsFSqG!yWnH8Mm4vP1<%#7P{O*ypgaK8(n?b(A{q zy&L#J?zxZxudpZXP0lHkDT=}%Y>g?5XsTFcGvbUikQbbrlpPWd(p*OI%ZsjR>iAXH zR`omors}S$MLDaR&d#f|vyFLmSQpzbze{}w{;CfWFxBlpJJ5om_q zdIJYcdVR_0Z`{^YHSgMiqPKy*(>qfDX|u1<4M-1BBhY91gvuQAk=>6x9N8L!VB4X= zU4RhS4kn7dbvUE-m`AI#=pJPcwY@H-&Vd5=t{%1aF{uAU_UwbGaNu#gd1QB$5#9)- zGR7k-y!UR!uehG?r5+V2o`eptHHn}UBLvkBQd(=JN&IR~i2-AfjYMH0?^N-O&@#cY zU>k#ZbraZyVv>(f%gMN|W^88{>iqPRIxk9H zR%LFgHeOv+S7DuB=Jhn!)9Ref$GS1oHf!8e<2kZT{ds&k9nVH5OL%k`-|S{;c5|-d7h{W%x1x>%uN-=9mDRi2Iprxxoc831WA8I| z?lI&8M*Y8YBu+U!;51#QonpY5c>H9IlsmAeZ4J}7!9}>jkxE?;)A^wi|`R0cno4k$0R?4lfIKBbG<0E ztK$rqkvKZa(4#}*iwm74Z$T6u&3Vr=)$;g9gzhcxx@8Ja&v`GhpygTS^>^jqR^4g7 r4WXMba~L8ky7dh8Rzl`rp^qJQ0XNomPY%8GUG@Rv2yqWdxL1g literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv new file mode 100644 index 0000000000000000000000000000000000000000..a0152aba249a0f1c79ce0812f0438ad572fa0c08 GIT binary patch literal 674 zcmaJ;&2G~`5T2PGukD>RsH#Y4M5Q+UIaET*DwkXk7Y>y;@&HyL4)UQ%ah#Ng;3asM zJ_SemHwOYG zR0uf$DjnEjW`Qg?3*JJZ9|R!4m=jQ5=urtsx=_!Y{<*5Cas>q43WRwm!GGwxcKumC zw*7s(ZR+)==ViNE9WL8_yKL&4^|J0ZJB_~t1*&92y5ohleVI$0?8$95kFF@w3UDpLJc5+KoxM|Qf-?}yCR9x&8DSX zc@cOFZoCN+960b0W$YxVt*Qzi#^Y~4f1V$Ezux$xLjX_=5K-{(MX+6$g^hkO6Mn`Y zsD6qd{w=cUyR{A zImZ1I_X|mc9b)^rH|k_v~PP^ zKPhak@ZR0+NepHDe7@-LIzfmg|Q9p%5}RjKv* zD9t-vd#rGEW$GK(3JTFAIpy6;i)_!>L7FE;X8Q`OGp()cC>zq^$;o>viNacSikRIK zUnXRakr_Z%=I(mQbq%r5Eav_KjeD{rR7l_80i1rnt;D8OjaX_>tJJ+;-dhfP{W4Q z4O+TaP@1nm73Mc9%-L%(D!fFg8cGP^xmQA`Yfy_75}UKbTleKn?PzCdK* zj+LIQSxpi`&*uyh5#nky;Yhvq5+$uma~dXrT_^C$*gi~R!-zJjo2~)luqdH_wObN# zSfbbZ(UYkMx}kA%(e>$)q!)cAC!WhUu;e0)d=_4L1?k6g4ymKQfUIJC0a?bfLxk6% N%8}1CPywi(e*poY>vjMD literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv new file mode 100644 index 0000000000000000000000000000000000000000..96963b9193dcabd6c899e788335234e2b6857ca4 GIT binary patch literal 1337 zcmb7E%T5$Q6uot;x~r$EhnWE)hGUV|E0FVFz7yw5yjFTC0CUyp$sWAkohyWmRMsd>D&Vf)5k%zBRxlPaA!@Z6uo@RNAwR4yEo>|;@TAq^t!yu9=eE0%^~$Q>><(<1rM>bP z&XaxIPI0@GMA#s}TbUNz9itx2AQLJ=$0~rN6iKT{r1;6ux+Vik*?j z3R7BZ3P-tbl3vRYVh3fBwNhi-rrb$QG3fVgUQ)n3>20S9&&$6~atB@}-*J>H%d5)D z+r2bzckI5xx!KdbaigFVO_EdH-L%ZMjP0j+Qf9WNuwGkP&i1l`oM#6gsU-><^;5)b z9{4sP`-%~BIV5T5S&+1;MmKoEmfrqmGBn`e$W125a(UIHCso-@XXP?KEtXAP-A;f?}zGjQ7s+z0%zXdww-n1HkQVuQzatV;Tgv#=Eyc6EiKS(~(3NAnnULBGL%viMb zmehv>3YxS`N?ar3xyjhQ1A6UPH?Exkgal)=OFS;NYjB0g0T{ocb~gl*cr!Uy*i*S*bxS1ZjU-f zKw>!~BI&VtX?gYtKM}#m33el6df5Jh7%BE`YOgUSv9cKF>Nn+JGwpPG8_hZ0i_27}Q#DAX!gWa_;)1H4J+-~4@Lx2uZ e^5E2v%-Fmlly*a~x%PJdapiLE^~xWQ1FC;RPhznE literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv new file mode 100644 index 0000000000000000000000000000000000000000..61ffd7ebaa9512a9726c62d885957b9b0587c6db GIT binary patch literal 763 zcmah{&2AGh5S~BVyS9^bE7TqeQV}FvKqVDFrQ*;c1P{OgAr8?t**1~dM9QXBd*nU1 zlxN_HxbhG%-Ysw|BaQvde4}sV@m$~i87u(g2%db#>+j_gna>0F1+OvtMhEr>?Z>bD zodA)Lv6D(2usRfg0GT>C(xV4@c9nuP5CCg5=dG#-mjOhFfE{9>UQP&XSU`jb0-(Vj zdcq7aL$r#t8>7uZJQ0&Y?M?Q>YB`&qxN$$|*{E`rO+rjp#N*&bDv(-uAEm80$n^(`f;ufvKm#v4)Pjum>awng9hCox*(I%yX zfrhdZWb3UBZ2!D_BeLnLe87T8w+F&&55uPe$@O~Gk7z<3m6i3N>CI@&z7mH6+0yG> zKa#nZM+zhlm4CSz#q23j4&;em$9+}b$s-4rUGq$zphX|GC`dHHP})+bT}ih$0UgwD D{oix} literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv new file mode 100644 index 0000000000000000000000000000000000000000..dfbbec25ee623c998d068e7a21fc4bc15e07473e GIT binary patch literal 3000 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 jw2a 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 BrdI#} literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv new file mode 100644 index 0000000000000000000000000000000000000000..06b92daf4eb1248ce9a13baf6061bcfbfc4f956b GIT binary patch literal 638 zcmaJ2=C}0e1Flqt-B!>WmPALM2fGSvG#aqTI3JOManINDK9cFu0 z@jx;J3UP#WzPumZ?dbHhZ&sR&Uz0Yh~7Z+#+q;roMfxr-v$mQ|=O4I9OVcIG+g&vu?zEq# z>$B7s^539k{qI8de|6T<+$^GCC;ju0Xy1-JgMg}50`6x4N_eboQz9>NcnBp%DyXEW z1r6{BCjk%iN7ak_fyNj)ngUA-d}wl8XjdE_<-O4yn%nkn$G}n0Q~^uY0RYIfVaE^= MmC@l)rke)%0|(JgJOBUy literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv new file mode 100644 index 0000000000000000000000000000000000000000..5491e4779ff5121f73ed2861933fd01cfbfc9620 GIT binary patch literal 418 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 literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv new file mode 100644 index 0000000000000000000000000000000000000000..a2ab5de20e5e5e17a53867aeb1a5df41ef83bbcc GIT binary patch literal 4815 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 Y1jqoAL2?MiZv@XRj`#@wXDJQnAJDD6EdT%j literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv new file mode 100644 index 0000000000000000000000000000000000000000..ca249f660ef71663ee14f81f7926d5b5b42f6ebb GIT binary patch literal 1381 zcmbVLy>1gh5T2R+z1{V{9seXio*?znQKU&lg(y!>d{GYBzR11+sd)$_D(K-s;1Q@0 zl)MD9J||J4C;}{dW_G^so0%QoecJo&H2`=7OSUiezM%Yy6ZH!}qIoCY3;RJobKkZ0 zKQx7(`kQEdb_4O1qxQl>K99wR{bV;gYYZnG0-72f-qJjkZ?yG1Jp?zGe#ys zhSJU(Jd?lu{S(|^^$yqUDBHQG`uI5 zEiNjz&2yN{^5tbVFV2#mEUPZhbGOlC z#qzXl-h{E$=xn;aHB+_~Q88;3v+Q(LE;7E-DqpWdv8?jdaypNR*7ad~zdPqxe0-g| zJJ5}Kl`qQIx#X*{DVMq4ZmryGSJ!Z_cDDwV>vEAdFL=hPyqb_-rH4NB5XcxmZa7W= z97m9hJp}DBC{Mw7^%R0^niPU?+DR``^!mWdl&~}LCKZG%>Nyq(k4z>nJf)OMA_n?* z0hRJA%D}LHqj2KDu_P$2s8SQS3zx9yB}t|>&9*RbHX+5SaU4=^(!xn6(qvz@yu>7s z8u~cpRW-*05oy*;26Y(++>H5wANkbt;~mEh0=?*r(?CZ2#||uu?%hGcz`Z+g4E*H| MJX8Pm!u((U0bYE^yZ`_I literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv new file mode 100644 index 0000000000000000000000000000000000000000..225867c0f30d3de2547553b800d9fcf3a22521db GIT binary patch literal 222 zcmZ1|^O~EDfq{XYk%5VsiJw(ahF#ZzBUgc~mr;dhBO?z3P#lOE7?^+rGcyYVGaDBZ z5HT@wF);#Z76=zC!YG)Mnw+0oP?TC+9A8kHl$~11k(!)RoEV>NC|sPHTwr8smTefH znp^}_R+d^MfDi-nGSe!7*5Ct7%p5RjW)6^>K!BNp3Bmxmkcp9zff49lAZ7w$1^{ZH B9GUuJag0EBFflL!F#`a9CltB> literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv new file mode 100644 index 0000000000000000000000000000000000000000..d3687f9bb0549329c9880534ffd4dcc3c590bb3f GIT binary patch literal 138 zcmZ1|^O~EDfq{XYk%5VsiItU|pIuCtLsNmxQ;sK{1t`G?ge+`aOmM`=$eNm5R+PpA hCgaOei!#$HfeP^fCT0#ss5~=DqS;CrHmYP=r N6vPLZ7#Nut7yxdC266xZ literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv new file mode 100644 index 0000000000000000000000000000000000000000..fdadd5c91d2c6d1a412e560dc696f2f7b453b6b6 GIT binary patch literal 902 zcmaJ=&5qMB5S|(5$F9-0~xiAh;kT)DzbzY13}B-6TrWN_`Dp0P!|l zIq?vP15W^Br&|@Y!m+=MzZu(~?eUj~KePt`3W1115l!8vZA@YM@I0r&vOO>iS_E+BwsAS3}W6b`^0m*)&z_Vy)ngC0YqG{D_H14?idbstJZ zr3kr7u7W%Xo?uB^B1=3ct4FVkc-NwU1<|1`<=ZN8D&dNY|meK~Qna{Bz4Yst|f zUw1KOzDnwO7dl#{*VlIBDeJGAs=b`NpkgtqJ5|ZelEoA|lsHV3YIoAR%;OjYFSb0)gH0Py=%cLw-{sawCnQ&=k5_gx;`6J&r^`L_$6f G0){`@T%V=@ literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv new file mode 100644 index 0000000000000000000000000000000000000000..2a210113f4af4a684295fe5fafd2c91b825a61e4 GIT binary patch literal 1597 zcmaJ>O>f&q5Z&2Na(79I5@lJjlQeaK910Y08$kA>+eNakin$jSJInFoEn_He$y?u` zpo^IjSg04IV`iSu%SE}YMR9edi}ku(UWvasG^)$*p?)Z%J( zqss5Di@ANVSuG|_GJd&PU9Tsrb!A=^)vHOp^0Q@KZkEM-0@m(sb4#+%f^DDuU+v<0 zKHAk{Q_m*Vw3rv02{!w>burt_mM{0L)%E4w%_7^8+!XWKRZ*7$1V{H7>)Cofn-=wK zwKTV!W>ey+t1_v|dQw!A^`?9=do6GS*dnS|?Ev&mIjvWlAk6oypy~H5645p-BFMT~ zqS1K>Mbs!C5ndg`+r<%13i8O=fQ|64Vtq(s3^0Tc=9oDevnQORP~?tF6?vgzhreRx zy>LQ$)pbOMo;u3U8RUk-$Tek-k6D%gl=s0Dpn4aitaDCW-v_$@O#mTXM_Go#@DK;z zTDnl-bJDDjq*fknI379)Da$XSC$g_bJJd*TU~*UFl~v*BiTvD>RbQ&y>%^pb%=evDBn8>!Ho?3Ayv=l=aU!w*fSv_huS7&V|pkGXPJG>Q(Vgxh z)pPzEwVjTOy>dEL*#Oh?jI#um!aA@nEQ9r6eOL|~zz)#m@iWUmxfptBr8c`!$0`YP z7Ee=l#=Y5hi+Sp;{!ZknCHa9GS!va9*V_>4`OvDM9IsP@84q*Io&IV#xHsP(?h)i3 HlquPNHf6Fa literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv new file mode 100644 index 0000000000000000000000000000000000000000..464f50f8fc2ce4129533550574378137a9fda5c2 GIT binary patch literal 113 zcmZ1|^O~EDfq{XIk%5VsiHntoon2UpLsx;vmxF;3C=SF-K!TBti;0noi7P25F+0^L g$;i};M1& literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv new file mode 100644 index 0000000000000000000000000000000000000000..c6445478c749e32c43944eb6371f082d262c5776 GIT binary patch literal 1322 zcmaKsOO6~x6h$*nW>&eY(k&aAHkPpvw7?S!;{QQ_Yzv8Hp!fn4+d>wC8Db-dA$wo} z?1fE`)lI_$`6)gx;@!A6VsPWPcmF!>hGDoh4)Zj>JwIT1_`&}3C%3+Py8C_nb+`Vx z|AS#3mtopa!+07P$1R!Wt&ih@k@;|7nhvl(oDEwW=Bwp0jw9^St5@ws-PKlJ)^@y} zzRo|rZoBs4v^9O(e%$@g%IlZkpV;3JyrFg~jnl0g#I!x=I<~w0vili?KuCl_XoNvn zghO~lKtx1BWJEz!L_>6>KuV-SYNSD0q(gdSKt^OjW@JHDWJ7k8KuMHBX_P@(ltXz` zKt)tSWmG{`R6}*NKufejYqUXIv_pGzKu2^!XLLbVbVGNHz(|b3XpF&FjKg?Lz(h>K zWK6+SOv7}nz)GybYOKLptiyV2z(#DsW^BP$Y{Pb(z)76KX`I1XoWprsz(ribWn95k zT*Gy|z)QTsYrMf*yu*8Zz(;(-XMDj|e8YEwAV`8DXo4YFf+KiBAVfkUWI`cSLL+pd zAWEVlYN8=pq9b}@AVy*$W?~^$Vk35vAW4!UX_6sXk|TLiAVpFlWl|wkQX_S;AWO0$ zYqB9*vLkzPAV+c{XL2D|awB(&ph$|MXo{g&ilcZ+phQZdWJ;k_N~3hDph~KuYO0}H zs-t>pphjwmC+>o`bpe_fU@*Tp+~A#l(`4o0!ZCBI1iP U5{=`HOwE95@Bt literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv new file mode 100644 index 0000000000000000000000000000000000000000..64c0a2727c6686dbe122b8e7cec24fb9e5180fbc GIT binary patch literal 4293 zcmbVPNp~B^5$<)SXL_)Mn@DkyNKw>AEtEJEC2ApKn-*=!wiG*?VF(z;h(Le=KvBvu z@8#u`zu+XlBrks>hg@^WFUTRwS3Lu0jSmLi)KphhSAA7o)6?_knSWZ3F_!0SQcQj= zpZ{K}f6E>HSM?w1|Hb^#n7yvCXbu2XH!x!_Jzjqu?KS3hbtBvqF)9f=nYH!Jqp22 z21Gy1;)nhi7Zcn{9+0= zpPxYJpH0s&_H&wYXZj>#m#1eL`_c3qV;@Y-Gd8|(3LYkc)1Z^VBIu(figf+VGGn`E zm%)DI=*MU0P>X=$9W8|IKY^Rb_(Gd19X{Uy0p4^_kMV8Ze{NL>gwv1t?TRYgN^m8pIrU)#`^j?_f44z!wi>1Fyc1i zrXYR8Ji|Rx&N!Xj12j^qvPB-SfMs%%!zfdkoXj|=NpEt_sR)=Y!Az$fVCLcph{(zk zlNt_3nHw9TGNvpb4$zv0uDtNbF-PGY9`XRh9GDrdJl8zWCHJkRbRdKh<{mi+7@!yj zjqWfO(VE71rApjo4m=HeBSvLPLx#*UX7N3lSd3d4!AH1Y(U^4 zL-$)B9=Hua;TnOFE=}{0g>&V`+!{zF>H|=&VhS9^)wtm=rF1BWAt#8HMg(r>MyB4V zXxu1NiXb71(I@~%0RRnt{QLEGz0*j%``uozd#tv*t&Z5;QM-fWAR@Apv|If_(hO;^ z=hz&vkB)kcZ|nV}sUNhu{bxBxA0Bs--gf=aC&O0fmuj!uc;-Dk9JIO}JDdT%{Nl-O z{&BC~>F+1KN8NU-@v<-+exCgLDCrM^$1k?Kok8+qAfN2+$a=F`thd|U;~FGMrw@mH z|7nK(sly(ox7xwcV8}kNx66%ox1ZGNoo4O0HTbsKs~@WdlJuL&e*LID@R~_G86TuM3`m3ZdNQEjnXbp7oJn0Pl_n?;H4NIamV9S*VVW(ch`WLyrezHdlemg8@TMyOxS zbt{M@<>Ar5>m>)>=SeZW)mr-~9+37cy<~9IL&C2WCCp^#KChp2nn|zPPX@KO+czMg zD?)L^)fz|rLH8i)e_QV*wX|Ncf7DWg`m@9gvL~i6WNL@**$D?Pu*&Jfa@1=2xacV; zX7?I;ER8c13@aOvV9>?dVZAl*9wlb8>?b#ZF=z8_xy-}|FiO7@cmZ)o?EW;jh6 zIg;VcpK0}oqoWc1q``^B{iGQ>lqML-!Vzaj98NyzPv~iB~3geN7lUbxK zukc7kGOtT_tXfbdJ%(46&z7y{{4A&wdX^+|*~-!_t8w{=tAvCvUJ9AzrAei=wRlgY zGev3JvH}|uIP)={ADIL&A_!5H@&RL_;ukD|T8=85al#OgW_-$#+VlfVH$REGAF= z^0F6~Ip!g;7;T6QLmsLP5m&8r$&e@>qoY6DzBS6n^^2l@aI1tWmh=ShTF7WwTn_VU zRxf5kFU!M}wX3B>^NPr`s6R#9&Ihmh%oPbIO|}f+<7xpVo`}5A!_vrja!F0PHnXr0cwi%?mr_ln zkgSGxq=jah5=Cr?I5=W;^E{5qo{3LTtKmT_k*4@+t;b=+#|W6SR4|$rWipZ^6cr%E zQIJvlAmbTPeN%8!jJ+=K;#n~c!DJaB&|1`Ib1FjmCK9?xAW9S1sf3uIX(%2!rpnI= zd?LXt?O0w^)dev{66}N7o-^D~2p4^*{hz%?kBMp0B7ve1Gno(U64 zBUTl&L!MU!KEqNuYA)up>F+?0Vu4iCA;Tg&xXNfs)U`OC$co!sDMy4umbA0Xi&Hdd z@$Hn-{;#~fvy6{+mLTmN^06RJlaG}j;KM!cZimbEg|ZZjaQ4}}6%|QcJL*}h3u(_% zTZD2!jp->8geeeozw4AGfqA&+{V9rB_o@TE`hYJ6NVydQ-S(hGgO I^Vl`^Kj;2YS*5ini&$H7Nm_P&%>zJD zya1$l5FUcJpo%BpK#%Noik|{hrT+c8^-XJLemwovDFBEOQkFjEPv4;U1yAH}_zmjc z*-za3pdP57)wAfe9=Pu`i@(?3isTIyoq&Z5j^SN+51s%D0HzTTAqLLr6)^}cKuYS3 zN-+RKSq1|ZfP~7WnBQV$2`*^4v^-zt0ljAGidDnMsp$oW*IB zx^z08j7L+OX4yd|Eoj4)5kebH3+-)crVK}A7+DlTZJ6jSi^?gqNI8x{0_8$JXo)r` zja28590Q!97HF-#ro!+ALMa0G5Jpz;sin5apB0z(liSW$ZCO|G-g@CT@iliTzxecHUMv>;qPSESb<@;0(N^WF>(0!J zDqq&~D;tdUvY7j1;oGjMH@RP}yNzCyZE>;mZgIU@ZSq&8UoMixrYctDeCsJ+1%URq zW!ts6rEhLICwnV=Df+T#^I|^tZ5x$szAakBWR_Li70abx$g8lfK`--tu?X~%APCv{ zrYe@a@;9o!_{z^axAx7dY{QIN+4E0(xyP!;uj;S8Zo9fEF1_37KxxqJW|pt}p+((o zKHp94x?BwD4X~Vu*I~^2z#R`dRR8ucZtl|D(Anr8Zurg;w5k96h~XV-A7}iLVfV$9 z&Jzw1Q=l3=jxb``p^!46o#O;Lh8oTt>Fn5k1WsfF$ISuEfDRuO97W);FR+gGC7eg_ z;S5D84}#0iDLP{VIArYqpv@hc2lT@TqHS+S&4|yw{ZLMJ5q9nZfxvCXM|4GGDHEYM zj*xf=X+j;La7I&MGNh6S14k+CKF0>g6y@ywzvO}|#n8k;j)SdY;e?pVd!ZEj!OV2H zx&SBtP^$V#yoDNO0#rH3jsj)NZ15$mTMS{$qQGGk!7LI(-P^;Pww-t7Hp4FL2IQjtE9$8S;njeGh>@he7e ziXmJH66a7@rv7E+xQ9!qJz zswS^}`Eq<#d-Ziwdh^Y+t(r;l^6v9y()znre*5JYa$J_`Y<&LOoHesqbDMT-bamav z=M*-sCUaBz+PA(}`guER?nnM=+TOdRHgB%HDre2KSKd#?SJnCGqVjc_`MYY~&PTUZ zdpTmQB!a|2Jo%x$&dOg1kjxOP@1V)?#Y52tq&C<^&B2)luP zNH@!&16rc#{tWi{iHEO%0-l3F_DBn-AjDFn93-xvq;LW$7U*;er&tKpBMXv67T}`3 zE|fa3y3o#$&5%!|rif1D(3-+HsShbkTIm$KEZWE_E1qK!Q#zF!!U*4{g%dRtG%^C_ zDG(Bc1Z=rLq#6R={(s=)0-bWgQQfO8ZjoCJ`;vBSkESc7C)wtNpoe`y*5i~rr2*Di<&f4x zVf%QXKC-+3*n*wqV@n5ifS>_F+^IIGr9Edft?q(KV03tO{6Y0UJtnNi{WO49B d(DV)0kmFbf0TTFbl8S;aD(xKYAKfSi{{Vqux)A^X literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv new file mode 100644 index 0000000000000000000000000000000000000000..31c19cf6f84ce2c2d8096a4c72f4331c50522d30 GIT binary patch literal 334 zcmaKnI|{;35Jl&gm&B(!x`j*I>iH$WI+3=9Y$1~3GqaHt5G?M2(^L^kW6!Zye@$joGB zVn!w=6p*|uieX+}%6ywnTvtj+0>GB qlqTsc%LpPKJSIJ|OFqJr-S!a?@n7^wOt6P!K*4tm^|YTqCU^sY)*XZZ literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv new file mode 100644 index 0000000000000000000000000000000000000000..7945765e07aba7b15944cea06ded0bc1a9472fb5 GIT binary patch literal 680 zcmaJ<&2H2%5T2jdah%<4v#P2dkhsE?GY3%NN~@~(C?pn&nmDVh1M~%W4aC#%44gP} z;L=CvIIGY@QAhFQv;FzA_09Zv_BYo6U=cLwEuXzs*RRrV_zTT%dZWMd3;UB_uI~8D z`cJYI+6oe20zi^4MF0W=kbAG5OQ>0X22kgOaVn5VHdvN~$?Cit>YK9`~eqET(}^P zNPGYv!Vka!iR!i;a>`h8bv@Ust>vnZ_kINu00syya|b;7fX*kB;xnG8pZJBl@5OWZ zUHnG>n+gU$)K@nA<2mEMo(~5ofWspI1;8BO$N=Vm0J}ii4sw8qkvMV$fGUzHa!d^D~uXS*7cG zmRvSVT{L-`G-VanP10z-NNaCVR#kZw=b7JWmw6@^Ri3@pVzFs-Ez(t)zLl9?=|%_b z5$Ef7D=*WZNSc%PJ|day@B}f-a(MeN^eRtg^WC zleI1~UCryuJih6w?;y`6=6k)V8@+DbT`I*U_nYfDZEt&E@+Wni7lp1y2K=wr+IpWJ zSR(y4cRlnQ-T9z6y3-CIwld^ahT6(-w=o>PjR78a`(CzkX;#q_$S@=y8aU|$Fo9G0 zdIKWHIz8MEIpYTK0H$WjNgV_b9x8QA)9fnwOp#%VOwa^NN1+9>1(rrHYjd;O%(Xe-!w^Pr2>$>U*}#AR literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv new file mode 100644 index 0000000000000000000000000000000000000000..3a84362d158a5dd8591f9bd42b9d50a7bafd9136 GIT binary patch literal 873 zcmaJv?bJaB<(OF5n+!-ZtlGu^p@a&F zk`F?Nnx0uFgrm8U1Po07k~BA(n9{ z`ZfV5Y#dAofQK?gO;H}$q>8{M-4AT)6-=Y72sFxzFgNN4L1B9WLu{VXf< ztSC_%i3Wr=5JQYWDkP|4Hr-`9M&t*P8z?YAG=xS_m}Zs;$RtK4@EbWXLeTkHd@+6N zX8!r)QeCWk(=Owe+ZXN9yR8?m&d$g=f#s1CBWPa_crslo4FZfU28z{`NPm~*R zD#BujD1rVUEL|5R5QfvtLe3kI&=@QfI8=Pt#VCOsPlyiGf``UP;!p<8m`HMI^1Z}Z zr1ZbUX(y2oMR!Fcg*$?sPLnq+l#)vvk_ox$@}t!!#5)9oEaBZxDP^z!S~89j4Nnv7 Nmt^nCs_>Z*{s5 literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv new file mode 100644 index 0000000000000000000000000000000000000000..b5ac88cab54023112c9110910eddfd3a4f3db065 GIT binary patch literal 863 zcmaJ~`Bqhzk-Df6y+Rkm#kSUdlPz-53bkP0Fs@?(!!fgy4oa zBL0Ej;KYTWz|MviE*(XFdG^ekN&G(F|7`>Sn%PA{Tl#~})SjWRC#nPMsDNWQ8}BxrJwH8R)2b4)cC~7+^$yDArC0NiF|C`msNBMN zmsf7>SM9cR%L~69SKDT~tmkFhiI*>Gx2UAs)N8*ksjgJL-X)5KYhLM==gv-4%kg1z`}o7iq=-EiBnb>A5tkO~=l*1!`8h6}^p9`Q6W5*`^G78JbHeO5PH68{W> HMGJobx^83< literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv new file mode 100644 index 0000000000000000000000000000000000000000..385d4b7273d5fd2b4c1b1f569fa10699eb4b1b8a GIT binary patch literal 1809 zcmaJ?OLOBy5bo|7X~vQ)S+SgVHgQPSERV1(u$3cKyO+IC6q`L#D#e;jL~Pk*E7^n- z`~yzh`4tp5PVif{ICA1fk1T}~tEy>#-8235V;=rx_b=ZC03RWw@JKxQ73Ev>oWJo# zy``TV{g3+6{Y`)C{oHvR{L%SQcK_@qaD*N{fgwDGPvJAb0Kny;nMVO2DIlppup%4@ zjv#;#5D6k6mH`h~7ZL#mwHyft;C(ATcbVX+%S>Om9e@*$)lWP|k9A?BrlgrP1Laj$K09Wm+Ee;(6!m>+?ymyfh2zq7-w^5Jjse_Sj#jk^YqG?c{rX;r$yDe#jMV= zsyLst0o>e7Ol6|n%+pypxohIOd2wNumH&D%o2JuQemyZkjpy0;D!VZLg{e}`bzzoE z&*IgZfrW31>N4eQFN!joq(#1@B9DqZt^FIHF6-5-W#|`64sOz_m>TO|GHW=^u1s1? zr`J`+>H4bxX=xi;nm6w3{5vzQ*6W<_o7Qw^8P{f8Q)^L8;_j-iQQf+6S}n42`PwXc zZ7cJplK4METk>MHVJY`IYH>5CxevVkSEYv&Ej@)m5FXs@T%K% zygE9aijPiRs$Q89C{S9i}gckQU z*&srGGJYWZ-8pD1|Nlc`TdN~2_xV1Ntg-u4921f3YWGOH$CP*^h*lbK2K}`VPC-gX z`-logrx=ir@qS40CXcN(j?T+S`{3azPo2cWQ)aL>*M~m81n~|D%hX|C3^CsHp$Ey3 z?DMv_VF@jnR~uz)NqGS#!vLLu57-INM{+EouoL9A5J*`l*-8o7e$`kc)M>Fy$ZN5a zaC*%eH=&@#Dxq$RbwZ)VHd2Qo3rRWDTLG8i6;QN>vW}+Qc!S@}Mp3LJR#99!zk#;) z0lPeSq;$L&2riO4EDojTgj|}Uk%w%P$wN7CxNKB7s@DY4=fx3m15Qq*FMafBjcDC+ zjeP8jKm_E~b2OB`6Iowb`^FEH9?ErR+nU6v;bB&h*v{48x(|^U&;~2is}u0>SSrU~ arNGf3k^|xcz`M(jvfzIu62R}cfPVoSsweXR literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv new file mode 100644 index 0000000000000000000000000000000000000000..ddf2bdc2e6eeca05072c239f70fc3bc232eb6936 GIT binary patch literal 835 zcmaKr&2G~`5Xa|ZcfFonJ2av_6eN&9;?{Gnp(;0S+^vup$xxgqF;%$m99($-?wolD zUZO9-tnDO`-rtkJC|&hsYOFtjeQ&=2?9w#j2wIpK_n_U`j|%- zDFEi+JOXFE-c@v|@9)Zrc3a z{&L-R^}aJpbtkLlrdie1qFq&=>UvX*e$#gAsx==q#V1qU)XUR@=(D@+qTPL{w&;|&2 z5@(=0GJrn0LNg3>F(V?46;ING=ue6BGMdQ3VqTatD*`17zb+qZ2?usc?9W+bt7N4h zapLMq0tQZ8ZDlkxc{a8((HV-j>`$*FU4 ze&phP?x~dmuSB05=s5NPxSt#Efiq>vw1m0b@m?BdeFm=zNSH#O=gbAt&iYUM1!hHB ALjV8( literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv new file mode 100644 index 0000000000000000000000000000000000000000..976dba4d3c28ad91ae1e261109b0fe4735a5a0ac GIT binary patch literal 404 zcmaKo!Ak-`6vn?dZ+3Tf95o>d!h@(_(WOiy=#*A;s-R1kSTgq@$SST8LKpvpi0<`A z6!qtL3%Ype-mGHKrSI_g=6my)-U=PHKK%T>Pn#k2z%G#<0X(1J?VJ6oHNZDHo+-P2K>n7$Xyz~2E*bQ#0 z^tVHjKN|0Gx~+6m@d*@AV`$L~q= zq5m;D`P^B*x*U(+j?UjVp0_81)Am+^Z;1g}OFm{Mk2Ma+NFxku`5Tv|ah6hcHL7Tv tm*l2~<_0Z$q9pT9A!(tK7V~ruhn!+}L9$|aHk=VT$_Ybh%CUV}06$nsHShoc literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv new file mode 100644 index 0000000000000000000000000000000000000000..b035d69b60f25ce3a93a70c4925e748efbb07651 GIT binary patch literal 1259 zcmaJ=&2AGx3?ADvv%531+ijs~g(@USOKu z3kYt7lR_4xP7|%tIFD0c7bF6#2r?=^NQt0IWsQ9SfrbprsKOJ~3g{}<5E3zvh=Ul% z8jxbEib#Y4U<=8Rx_>e$=IPU7Ff0a>`Ln5?`s}Fi{fX~+b`AVET7323WbBK{`f>k# z?~U(|2CwJ6!XHhG@nGiZ#GfYoD}(0IXgKOI&WtKvW{DT-JUdf*??N(N_~YTsw+cU= z3=3Z}FKO-gv_E1qK-8@Nmhm%x#6a%+c_&QfyaN=Uxeb932#ekTa(7p_)hVQc9d0ud z2il=Qea3mofq}3%<=K|&%2{59g}vc8(4c{?P&~Ljre;@m*@)dh^mk~YQl3~OI!4?U zHDwp>fFp;NFPqFufUsx@k%{xw5Ng5V9vtc_Nuw4jIjD=gnnEaP8M+53*;wuH%W_8< z9HfS>$V8R@hVmJm{W_OZOO?A|s4aKWMy=#zy6i?*I-M#jtq$c_tV?M*R4Z1YV*dPE zqkmUqSa0rE4c%yT8jZMa;GW)vi$TLu+m>y^?=bj)_uXO_)lQ%Yb*{bo4>gmwrBgYB z>Li`UKsW2#mQzMGtjM6#MuqqrA-}3C(N!gm)Xl_^C3(v#hDHJUFhHY!pi(_boU~Ft zu@OVH!K?Cx5r*4TJ_M}hop~9a67hU4Y(?P8N0lQ9n^TRqEjN`-xihA9LXV literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv new file mode 100644 index 0000000000000000000000000000000000000000..fd18c78ff2aa94ef33be0e3ad0a8c28e54c813d5 GIT binary patch literal 60 ocmZ1|^O~EDfq{XUk%5VwiJgN}fq{XopeVmAwFoGR4=^zR0Mcj#rvLx| literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv new file mode 100644 index 0000000000000000000000000000000000000000..a5899ea27f668b57c68173ac9da27b540694fd7e GIT binary patch literal 4287 zcmc&&-EteZ6+ZY|U;*qdmzJo1TMTW>abnAoD3`g(#7#0z;%GXPX)?+5fNMIYxC} zUlsTN!Q{VLs{Y6R$@Smm&(i!Y{wVrSd}{w?xBY+ZUmD3z+cnx@h8<8un{<~R(HB=&sOASajRv>-2${4ZT9m|O82YBb(@75WK-3?1}>pe^AKHH?| zL6b3~ll7EzN*ko#U*90(Zr)awAUt3I2pBObR>lCj;0CaO0uTP;M2N(4Kov{Aue<> zo^V+bQU)>$3{f%!Os0&qWTfegk(7)Cey19h!^$Om=p;0eL|^p={o(Vh8lDz|V$_=q zN3NnjAApX3|MKJEU{buCh_65YB>tutjn9XJqOW`X{-_v_qu%9ZG3blqlW}x>b$VKi z^vUoF2BYX?RP-iA-Y-VyFN*E}F1p7T!;?R$;&OO$wsZ>fv+nTtkHyKPJN1@)UtuV^ z$HU=8dQJT>DaO~rtG)eBV&Tus<`H zQ+eE;Q+eE;skrM%ou#?=nSwlf-aAP`*Bzhr4!VfU&->~;tg$&CcZ=tjlOOEGu-AtP zch+Go<#SFq2{B%S_;GjAYx%%kD|_eXLwv_TeO?0inw< zrPt^M5L2~?=634@ANHep_w34?kz<)P-4E#ccF%rC!G zl-jPw*Y}pgFXuOnxP=YPWm_cTU2zZFii`Iww@GZvaBEwZ9_CwGH>Fk%5%2*}A3)^v&QHOhGS&c0@-ju6q z)3H**c!+)X^_Dg2h}T$#rMY)%MTI$19?_f#u)*8#+ELEDv8KkCX5gFhE*N5-(E>wu zq?hVmJnfv6hnCG5?W%8`DV_5jr%MmFK2pDpedHqf)Oe+SXIT~aRZbgCubh%! z%{u~0YcjFypque!EU3xkGMBKqp8-9uNiQ7BH}e(Gok)4U`Wc~E*Ez=tNB3`Fz17lZ zj2f0QwG1kP9(Wz)nd2$TS9v%F-+!tN7J_ND?m0XF3HR12Yg=;7DwY^ax#~nt1z$jK z9c!oN3BqbP)lYJ(Tk=6r@)1I57j+`_z-cdLYviR9IBBJgTk>NoOP`tkH2)-bGGHiM z1M7PbvV@}uyoZO5yx7}@Q&C2V+AUc}@|0H=2ZRHrFQ%ri9gye9vpoWUkZoyAOFjaC z;Na8z2n(Y3%&y}ND9Sw+Agtpnary`+;S579jIfh`8Z0q%6b@IkpR7KEWa+pe3lw3V^i{3V{7J1t4_}RfMp=h0msXcs-lXVo0>+mjC7(j4PO&+(v|;|128Fk*YQIOX0^peo`~R@qY%~QU4D+YnTTB literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv new file mode 100644 index 0000000000000000000000000000000000000000..27aea7d069801e4454574d1448cba0b16f5cffb5 GIT binary patch literal 856 zcmaJ=J#W-N5S^L*^saN4T#f_~1rbF$KDv{TB19?*L_tzpj&DyGUF?%TL=MqVP>=>{ zI{pL=KLCk}A3=e{pJ3Kp+RRFCM{nM~8Cm16cm8?}01jb9qleAlu?b80d+%ZAgi3&(oQ@FH>&=Xo9FBug` zulV*NLgc+>K<B#}e*W4ReF5gSG>HlzfU zd73ZtstEG9E~_-c^U&qcT}Q zPMf7U+qe{LFfLfug{Qji_qvcRP)e?wlD1!H|;h9XJysZ z8+X@TWW{FmzFG3-To-g*k!vXIl|oovjUkx(`Q>p;Is5HTqDj>K`6%!GxKwvz<+^Yr z<7XePzH}7V6SoF;`M|;b9cR>mG|GEGgNKnx;x917ft;wlSb)Q10*?}-jWKox9%j7O fsq{GGeVd7tw#dktOogYJ;w>RW2|{{cg(mn1{%U-+ literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv new file mode 100644 index 0000000000000000000000000000000000000000..eb33a26e5dfcff7e36ee8ec099b2f102dd655d25 GIT binary patch literal 770 zcmaJZ5Xsn8H&s@ zxNKks2SLi9Q54KjmMlkAu^es5nK-K0g_2wVm5@W`tjk^DoWsNrTA&o7O>zvF0O@On zI*lFP&?H5S8}UyH3N(21FvxP!jFb%D*r>XgOcy@A*gfr5!S8~2@%)*XG>x8in@zXP z4p1-O1T%{nlXlhX#xH#EuJL`?bo<&b*I_T4O}BQoZ*@0)?Po!6{IYxNW#7K@DsWd>*wtJ#wiTcDe~W~70*OkMxN+b>4Od>F;u@ui)mF4|l(=nr<0(*Yh*tn{ zMBKR}9)gE}Z|z2a5NxEGZ@&52nf2t|{qH^{qQI0&I#7GBS>N)#ieXU{{lbMTaAt%(u_dt-aoQTJn5Bb?Q#iAhwzNTtGtAVnNLC$EN)%|%C}tV8 zI)F+YfG@R-;Eib+l{W@TGA53>lpIZt&nwf)m(|oBtzXphrdl^@GMlBx^>SHXyH1TS zE*mqA-g&bMvuf2W>zi?Pv1o4eY*{ao7MinF$ED}h{G>Tm^Xl3x>c#kYGJRzim#fnj zrOWD~zN+l%Y<_ZHHT7Jtt|tp0#kg}NP3+9Ja(q=yU9%pyx33%Q&Hs)lvvDiK8yKIQ zIjTM-FW|B3F|Xh9F)>U0CJ`ZAX4qvUj=Ds4*vq?fpluRrWQ>-cQ)$J<2n-FwiG#8C||d*fFTZ3I4(`D oS|mU^B21=AEO8vbYs~0TUGM#)`meTgR78f9c!Dy=zZYNTC$PL}rT_o{ literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv new file mode 100644 index 0000000000000000000000000000000000000000..541a976b6390d63629fd96069f5bf5ee8d3b641e GIT binary patch literal 4516 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 GWd8%!Pj?mo literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv new file mode 100644 index 0000000000000000000000000000000000000000..22bd0aa3ec7144d2f5a4bc1709bbb08172441079 GIT binary patch literal 706 zcmaKqy-ve05XbK$A5QF~v}I&qW?*2UVrF3lF-N6wAqZNOv>jLx55NL5kH9lAR=fZc z7dI*G0G96jyF2^uQ!ej&OC10}g5Z&ta__>k%D+Dd-|!pN3-1RXd=!7O(n}`u#jlt= z`IJ8U1UnD_5-LOp1w4=pqJmhw0j8Qm@di@Ikz*|d1xmbu#PfwcSM508bqXe^WqT?D zO%cUph$8R-BcM=`t^tG9rjUIx62m|d`gC?0o!gNu7RBV6FV9YsacS+N&8Ankb~Nj4 zMOktGa7RTRtctr2^Q*gJlx>|!n`G%kZNCYtn_=0CcADI*98RjSEyL!lX?FKae-%hq zO)FWEn@yGOX5g-v1E%oLO5JMx T@-ggE#00UJ{6k=*DOm(RYcg^l literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv new file mode 100644 index 0000000000000000000000000000000000000000..324afef2567233aaead248d6c441d829497275bf GIT binary patch literal 2529 zcmaJ@$#NUV8UA~l?wKA82oWR*iV_!*qNs(oEQuV*l4V3J#(!)?L^Ve1eEo$O z{+Y`^iu>yC;vYi)UVpF5_vy#cztTs^Uu%!;KWl0F@7iBf?GMXK*`Jn|=wo)5eM(JQ zrK_|}@6!kLn4Zul^h>hD@YAV>Ccs$uc@m(~j58)QBjPnpf+Tp7c{$BB=}eN5Da8>d zn{rC)nhB!!h(Y0y!vwWCROoXR0bbS~whYYErC18$5$z{7jLWIy#HmpW!;P%&v3zMJ z^fYTg<=N6Dz)rRdc&E7nc(1t%c+Jn*#z7nK_Ki9teqFX0iC^3VS3H+njO6Znw*en~ zh+yPLw=h>r$C7KQRyq&;u+ynCt&Tr>03_OMOXR$MMUp<)UtvZcZd@V#S!0FF-euTN zK7@ctp6mhIhu3x~UAtFjBHfZ}fH!k!r?=Mb0vLzRN?(A)E z?JTceT3y*}Z(coYZQg9%Ztb^{`|C%|2M4XoM{AoKkFFfuY6+9z&(Nb7wKAzT8Mh3G zkeNng>3->BMN0pr9cbqXkQXNgpK&0t5MO`uJbN)NhLaOF{&I9$_AVOlqECynmH(lPT~WDy>s{(I zH>t*>3)inN=wG?tO+k!bynQ+vR_<+OUR<2HUljuM}81}p8W%a5*F3!^haWWb>+n){w7u}Q6o%U<}i(xS+doxVBL0Ks`IIAv{d*gnek{J4P<%RWS(@UiKrz=f+iB4w2kzcQMiB zr0ZjlW#tB9=*}(PMM}}=@;fIc(^6K&YiFwYhfrTkx-%b1^|tG4iyp=mde}vQ zoS2sVCA{6iwCWddB-I8#5I!~h2_JzI54&uR&r;ypg0HRK2|Sh2PTmL zD$cGjYKt~&^R{fO2mV}<*oCmI@SHk?ql;*L%Tmsy#5Tm3KSIN^pRmSusxsBsNuwm{ zupBEsg;pwZkxI+0w4#H}wy|xaj^LamZCgtT%O%7V1lVEYdLD&C?)u$?4s+~{$JE@G zv8rPy#LlMWe#Ubn_Yh9(-6V9(@?=kLsGYfl+P6_E)xnGd$1+uxjc~8`0{&`TA^G?3L5|WWoykUdmhy~$(n|eK zNXI;{Z_8!XLNFR9vH77qyYfzrf7VL17s@ow;azpZOR;@x{2?A5mtc5*xuAByY%wjf%)b^olVgnnQGqOQT~I9Yr*GG&OO^ni2p?5pYA?3vP3^ z71oG41yq3A5DLr@6(+10MTP`LZd8;r;75O+!r;d2%kh&NgFS|1Nvo+ZSUSV$D;H*O%nK zg4NlxYkhNf-|uYLTqx5#bhbVV7sXd+$=i`zFaNR0jo!_2bfeYo^o`~6YW(8TOM>+7 zV3V_E!m;U=|Bx`;w|>t2PWB;?x>7ehS)oKK;`oUw97IOzy7%2+jAnn_MMlY-BRPsw6dSL*^x{DAR}p4MAwZaGG6%4h8(Zf~&w M&R%mOHxN600&eep(EtDd literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv new file mode 100644 index 0000000000000000000000000000000000000000..0e63a979b70a559ff45d2b13c175f5770649880d GIT binary patch literal 104 zcmZ1|^O~EDfq{XIk%5VsiH((mjh#=5LqmbbgN1<+D9*^p#K^`8q=Ykzrg>(~VIGNd+s$bIT`-M_W%q>VA8YD`@b!=V~uUpHZKqg9i>KC9Q`5PH-9 xd(HU$UJpUCg|FQMXSfT3AjhF{eChGTGE?R8s95BWvUor#WaiqF#~h2i_X-l!B}D)L literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv new file mode 100644 index 0000000000000000000000000000000000000000..fdcfa40edde8403e0134f503d003c012c74064f3 GIT binary patch literal 226 zcmZ1|^O~EDfq{XYk%5VsNrY8QlwI3{qga7$G9wqyTt*cJCZHrE2muLZCT0c(79hdM z#>K?Q#l!-nAc&cfk%2cOu{a~XBtJegub{L<421_2D@iTNOUz*|OG)Db;`p-EqRg~P wVFVMd1ZW{Xz{Jb}mj=3tg_)Z{kdX=KdmegKLOzg#DlL%&#CiU8ZbzXFB&>{}u9nQQl&O*-Iw!D^^winKXfV9)~ zn%(PpG2HWoSnn5D_l7CfKJ8;YEU=310W4y_53hLin3#-etNlDu#h^cEsoceCkPq`= zF&vO$Rk*(EIbus9p@gN`ZoDFPicV@T?+k3<)mtdMtP^G{7%TJ6&QhcarLaMGuWUlF zO9(Mdg0-TcJ8dHD?uMmX(Oj^~To2A>9r zYPs%AX6yOg?D1q(Q!&_h780eEFRy0vS*4Kz$B~QqLNBZ7{I=@V;v+U@S>0C4Ri##w z4_J`Jc&eZgg)^Aj>SjE>UTDbmd>Nj=!;5&>6+A5C9YV&K;P8|2E=X=}mhny=ZYs$I3+35*s?R^pY$l@D*R?B0MY$kmZt{ z2tHAY*DRzD@1!)Mi`;)Y!td!WjS6Y5asU;8?tY3l`AZgf)a23>)#}_Mvf|TxgvSC$ z(n~1?GX+`z$h=feL|t&S%w+^FLii6%8_x`W?L}p<+si42n)>N^BR+JnKt35!WX%V&Wr7d$*J=}v&W|^jZW2R)XUf( z-f1T@W#wg&8LKY`HXJR$3!J8Px2RRt2#3Oa(xQt3bp|JaTXdFDX+gu48S2B=(0Qs3 zGLg|$fpUYg6}2tBZI~f>!wi>&Z#x|wH=$0{y#xOy!b$K~r|K}uyfZ~N9B0zEIN3>yXXLsAG z;wUwIhOn;azDj9Dn`hSG3o+&()Y+09=e@y5A_rNrh#G< U_dJvCL(nkrXpDa{cuYdk|ENE*umAu6 literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv new file mode 100644 index 0000000000000000000000000000000000000000..52b3e95a454ee6b06413b693650e1b1c2abb2bed GIT binary patch literal 909 zcmaJ$}hT?>hC9=rbk!?kUf&%dy=&ASz z{09oe&!C{9rs1sKJiQUo4>OEq7Lj& zwH5v-7e8nzKk9E%eYZ0EVTEq;oVSS`D`IktEQT0|P03ims%W7zim|{O&I6;%Ja7TD zMOIcW0KJJoXP{xd5GF1w3!KpcxFtYYl(5Uj4EJe?vXCH^H?kolB6C0Ur6-QWMgGK1 zY)vefolIcNe93WJz|m%is74%^f|GNWd=RCwry%?6Y;3yLzDP&U)98=7c6`;e!$eX$ z4&`wg#=g5)4&5r5v^pCvir0O&TE0magF8v%vN?Vmul8kkHd;idek_`H>?V+g+D`rMi8lkb&`jK-ovCL9iUa03&x2r0^Of+O?R|25sh$kFVX{w z{6s`S>>~t`Yc6H7OD!xKj)+deu1c9nt;Jm3uuq2~7!k}}q}t>$p4P5R!>A%XBFQ!L zMn$!)U5Q~jl(p`zo|{l{MNg&nMn{$+CqvvmNdTMgt+gc#wJBAQp!W1_69Pm*9!ua| qy@SVKLZZ|KrgEw%7qVT7L1o!h2RsQ6ss4Y6_9i&Khp?D`pwM5RzF~6! literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv new file mode 100644 index 0000000000000000000000000000000000000000..2c190c4a5eac883dcb1be307621c818d03164011 GIT binary patch literal 766 zcmaJV|5Z%Yseaml~6e+?`&{4a0n)HNLqgXe=jAI2wc?}(Z!pAW15qtnMQ1Jz< zEKlgrNPBkA?zviN_sj9GpaCEtSh6!dK35-o_Ng>K@Hg7;e4>A{_kVa4KdY~pf6ElS zfB++yfr%@BWs4yEiG79x@)PWgKI+%>7 z0_36tifV?Ih9QE}l=q6p)_vxsIURhk$O>uW~)s$88?PIa-`!)y49Hj1msfy2Dv8iO} z|GVUmJg14G<%JBGjx3EC5CCJKaqeLPk#io(N(5X&U_wbcB^!b>qRuy7wq+kLk@&!L z0;yQa;&jZw!w{rS820dH+3P1rnPmAS@D!ukCtfO-aVN=>pwAMTI9K+**U d7~-6?i03iDRCaUkIYbcmXY6L1bn&cP*^ zC2~L%%#NPk%xY(!=DluzCK>=Nf+5ovo4e|0FM7mxG#|9DpM|wAVq@)1ocErjg#oU^ z8l)f$AVfeUK_CJ2xC9H#k^pf486Xl8psyH|jsUdbM^P*RHBV5Ch$gggdD6%Tt+-re zipUL1t4z_5K5iRdU&SZ$gGt@Gc`Hs2NA}D${?fbhaAfjX>0Mp8esS%JarQ8-CRe`B ze7W_vk$E1_)On>#SGm@aFSVaeXRcWvyG2%1xxdZo{MMyE4Z8r%gni(g+4I~CtItdr&N=Kl*`;J<ltp`Nk^6N9lqX)u@~WdeQJ qAPihEN1~1riH-`A9hIa4jT0CGh8V=8Lx&>Ri8^9}yT~BeXa!${!dQ&} literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv new file mode 100644 index 0000000000000000000000000000000000000000..2ea6fd528bcbec082637380baab9319f5f95e9e0 GIT binary patch literal 602 zcmaJ;J5C%y5Uo%Drh9gl!D}ob9FsY;2$68IsaZ%z`{{)-s~Kr#Y!;5d8Jt++0M5Au zv2Wl@xMp{qAVdY#Rqs_-KlS@{^fwp)2ne419v_~lucRlR?E^le`$MPZCy)GZ4(St@ zgGZ%cA2SFrggsyf2o{JGC?tSXT1Y@D%L*XZlC-e^##ul`10b6yARiLoVXDxnfk#Lf zjcn4A5giES&^l&4>;ddgPv}T^?g>gjW<8nnt|_alWU@Z1t1hlPz8HVWE@M+J%eWY~ z?f2NYXe;tA z?{s}z#m2O;TJ*<8i0hhZ)h=V>yLB<&N_zjJmvi^x-4Fj|Y*-Py(<45-74orf28toO zU?)~=gV;Grbs~shN(FIlMA+9XH4^ou3GfaOb4x5O9(ekc`;@(mWSA@EbruLM9tX;u Wptui#Pk_|!azG(Wu1WX)qojYG6kh=V literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv new file mode 100644 index 0000000000000000000000000000000000000000..dad32e9652e91d93851e10cbf440592ea8a42eb0 GIT binary patch literal 515 zcmbtQ%}N773{Encncdm3P$(i*s8qX1FSfTT9;}Dr!Hf6+OKsP7p+B&@EcNJvc<{k| z0$;*ZwBp&okV(ET$(OtxeMANT0t7>bm22`T={UA`_rWV(`*(aHAVd^`1<-&1ObDoe z0F5?4HV6^eVgN#OMDhfYNFkARAt(&N3WlVVc_{O2HPho_l4UBbmM&YB>*VpdObeG4 z$voX8RXSHetWNneJZBHGG3=Ao=*cEb0)(K;ab1Q%N}o&W#< literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv new file mode 100644 index 0000000000000000000000000000000000000000..b849fd41f27dc784b99dd2bd091d53436baab032 GIT binary patch literal 3004 zcmbtWOLH8z5e6E-3}!I<-X(WMN<&iOOA=}8VQQQxi6zRhnTL`p+i_Jco8j)58k?MD z?aq=?{z591Lw-TdIp&w-nnNnrR8BtSnh)3qQ#mAuOw}~H8~7UCA27iDVf`P*V~kZe z>r(f%`06(#zonPzPvURn|K9tnr@xJU<^8$x%kYoYQ}f#zMZc^4#jpH*rCR;xipO@? zHecZ{X_dOPPWR{o`aXR`FIZJ_#+j!Xt4EC0@G`tgFedRf@M^&*^qGi!CV9jZS%fDd zNbUPfS0oDpV#W|-_YsSI!lCU8Xs;!Q{IRm~W6#R>eTX9u;@FDsYKV=%_H2e$t{E$T z7NJV^6Nmeu!#(n=j6JiES5`c&)fsEm8jLlqIH}d)Jg8yb_i6<7Hg6)m!zMAY%M;GT z!=%Y%`w1ss%HHE6+uXYUz&7z?vdt6LVe0V#;;2ubS^0DR5WGCtvhoM-Z9#sz4ZnXk z=3MB#)dtu432U?P!*$N1@OyCU@FVEjJioQZ_E+}1)!xC%LHFSH!#jH$mH5HdgUw#N zcefhX;@vok_jdO7x^cX}9dE@uajzG@zth{;zZc)$zq5ZgUW>V}8;o=5Yc4!Zo^JS7 z70O!Z!^=G_W{nii!r+G0Fhp9Qsqld50A6)tg%)i`&3ioy5R0hJ38CwxNefJYdbzH0 z9Y`%T*FqE5HI&JrcmZ|+y6YI%;EDpKxRx9k+u^1_pNomzLP7`Jn_G$_jz>B$41mScJw9&4pv3@`HH zIK31v(=-2NdY%@8OdgN&qV+1f98L1_MKL^1&(A-;%8D|Y`<&r_l9t(Z`i@RsHD8Ya zJ1GX^ES+SoSA6!xiT7DK&Wp3)^S8&NqRifw`tx^}+3WNo6JMOXQol&2=VkQeo4m}< z^GS&$%$IrjW;jl-p;s2V3)fBuWqy_QuNR~HgY>esaL!TIC(_~2OD{&#qEzW*kmuqQ zg`Lg{^G-+O@#s37HT{ced3W$88+_9rXM+sk$NjVz_J^~=`{k&AWmA*`&=FYCFOd68 zD^W>vfU?rOnDnoaLEpOkIk>(EVgnAqUv=TQOsA7r4;P(F-(9bU}&*j&kLloJyav6G~)338ZsazhRlWv%QnZ7$8rNi3g^z=L* z^viKtOuov-dO^5Bidi`;)0^;o_S6-8;6N7fLTQvZk(bFB_1w8 z$v94Mvh9Az>Z}bv+mu>WaZnn;eYG26syc6P%8pu_JH@Wy_J(!OO2}%wV?^W7*l|sr z;0Q;+&7NVvA_=2HFVT@7iX&+8c7!QR@4<2q=&u7Ak2USq3`E3Mc!6b9g*k7p(4bU6flF7qO*4GdJ)cD9u-D zL+#9+SSk9Cm9n{G$%OG{Q-vy7jgVzcB;BNUgjF{xxfS_F8=tDk;L&4*Rc$22Z3dPL z-0WKW)vJQOaKN zDB=bjI5642whua3c=s8A)%#6+26nfj3f8e(9vIcJD@Y9t=9cpsbqK$AFc8-oEo)$R zVT)3Gp|du17P@NF3iM_pWJzm7+I3rgTZ95IOI?73JI`1W)9M07ZR%QB%MP&|ggjZ> ikd~!@mJp2UVOMaGY&6yh|4PK&k1O^Wm$B@5G5Z&WcC$kO literal 0 HcmV?d00001 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move new file mode 100644 index 0000000000..f9847971b7 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move @@ -0,0 +1,46 @@ +module gateway::evm; + +use std::ascii::{String, into_bytes}; + +/// Check if a given string is a valid Ethereum address. +public fun is_valid_evm_address(addr: String): bool { + if (addr.length() != 42) { + return false + }; + + let mut addrBytes = addr.into_bytes(); + + // check prefix 0x, 0=48, x=120 + if (addrBytes[0] != 48 || addrBytes[1] != 120) { + return false + }; + + // remove 0x prefix + addrBytes.remove(0); + addrBytes.remove(0); + + // check if remaining characters are hex (0-9, a-f, A-F) + is_hex_vec(addrBytes) +} + +/// Check that vector contains only hex chars (0-9, a-f, A-F). +fun is_hex_vec(input: vector): bool { + let mut i = 0; + let len = input.length(); + + while (i < len) { + let c = input[i]; + + let is_hex = (c >= 48 && c <= 57) || // '0' to '9' + (c >= 97 && c <= 102) || // 'a' to 'f' + (c >= 65 && c <= 70); // 'A' to 'F' + + if (!is_hex) { + return false + }; + + i = i + 1; + }; + + true +} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move new file mode 100644 index 0000000000..5397aca4e1 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move @@ -0,0 +1,417 @@ +module gateway::gateway; + +use gateway::evm; +use std::ascii::String; +use std::type_name::{get, into_string}; +use sui::bag::{Self, Bag}; +use sui::balance::{Self, Balance}; +use sui::coin::{Self, Coin}; +use sui::event; +use sui::sui::SUI; + +// === Errors === + +const EAlreadyWhitelisted: u64 = 0; +const EInvalidReceiverAddress: u64 = 1; +const ENotWhitelisted: u64 = 2; +const ENonceMismatch: u64 = 3; +const EPayloadTooLong: u64 = 4; +const EInactiveWithdrawCap: u64 = 5; +const EInactiveWhitelistCap: u64 = 6; +const EDepositPaused: u64 = 7; + +const PayloadMaxLength: u64 = 1024; + +// === Structs === + +// Vault stores the balance of a specific coin type +public struct Vault has store { + balance: Balance, + whitelisted: bool, +} + +// Gateway stores the vaults and the nonce for withdrawals +public struct Gateway has key { + id: UID, + vaults: Bag, + nonce: u64, + active_withdraw_cap: ID, + active_whitelist_cap: ID, + deposit_paused: bool, +} + +// WithdrawCap is a capability object that allows the caller to withdraw tokens from the gateway +public struct WithdrawCap has key, store { + id: UID, +} + +// WhitelistCap is a capability object that allows the caller to whitelist a new vault +public struct WhitelistCap has key, store { + id: UID, +} + +// AdminCap is a capability object that allows to issue new capabilities +public struct AdminCap has key, store { + id: UID, +} + +// === Events === + +// DepositEvent is emitted when a user deposits tokens into the gateway +public struct DepositEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: String, // 0x hex address +} + +// DepositAndCallEvent is emitted when a user deposits tokens into the gateway with a call +public struct DepositAndCallEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: String, // 0x hex address + payload: vector, +} + +public struct WithdrawEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: address, + nonce: u64, +} + +public struct NonceIncreaseEvent has copy, drop { + sender: address, + nonce: u64, +} + +// === Initialization === + +fun init(ctx: &mut TxContext) { + // to withdraw tokens from the gateway, the caller must have the WithdrawCap + let withdraw_cap = WithdrawCap { + id: object::new(ctx), + }; + + // to whitelist a new vault, the caller must have the WhitelistCap + let whitelist_cap = WhitelistCap { + id: object::new(ctx), + }; + + // to whitelist a new vault, the caller must have the AdminCap + let admin_cap = AdminCap { + id: object::new(ctx), + }; + + // create and share the gateway object + let mut gateway = Gateway { + id: object::new(ctx), + vaults: bag::new(ctx), + nonce: 0, + active_withdraw_cap: object::id(&withdraw_cap), + active_whitelist_cap: object::id(&whitelist_cap), + deposit_paused: false, + }; + + // whitelist SUI by default + whitelist_impl(&mut gateway, &whitelist_cap); + + transfer::transfer(withdraw_cap, tx_context::sender(ctx)); + transfer::transfer(whitelist_cap, tx_context::sender(ctx)); + transfer::transfer(admin_cap, tx_context::sender(ctx)); + transfer::share_object(gateway); +} + +// === Entrypoints === + +// upgraded returns true to indicate gateway has been upgraded +entry fun upgraded(): bool { + true +} + +// increase_nonce increases the nonce of the gateway +// it is used when a failed outbound needs to be reported to ZetaChain +// it is sent by the tss and therefore requires the withdraw cap +entry fun increase_nonce(gateway: &mut Gateway, nonce: u64, cap: &WithdrawCap, ctx: &TxContext) { + assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); + assert!(nonce == gateway.nonce, ENonceMismatch); + gateway.nonce = nonce + 1; + + // Emit event + event::emit(NonceIncreaseEvent { + sender: tx_context::sender(ctx), + nonce: gateway.nonce, + }); +} + +// withdraw allows the TSS to withdraw tokens from the gateway +entry fun withdraw( + gateway: &mut Gateway, + amount: u64, + nonce: u64, + receiver: address, + gas_budget: u64, + cap: &WithdrawCap, + ctx: &mut TxContext, +) { + let (coins, coins_gas_budget) = withdraw_impl(gateway, amount, nonce, gas_budget, cap, ctx); + + transfer::public_transfer(coins, receiver); + transfer::public_transfer(coins_gas_budget, tx_context::sender(ctx)); + + // Emit event + event::emit(WithdrawEvent { + coin_type: coin_name(), + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + nonce: nonce, + }); +} + +// whitelist whitelists a new coin by creating a new vault for the coin type +entry fun whitelist(gateway: &mut Gateway, cap: &WhitelistCap) { + whitelist_impl(gateway, cap) +} + +// unwhitelist unwhitelists a coin by setting the whitelisted flag to false +entry fun unwhitelist(gateway: &mut Gateway, cap: &AdminCap) { + unwhitelist_impl(gateway, cap) +} + +// issue_withdraw_and_whitelist_cap issues a new WithdrawCap and WhitelistCap and revokes the old ones +entry fun issue_withdraw_and_whitelist_cap( + gateway: &mut Gateway, + _cap: &AdminCap, + ctx: &mut TxContext, +) { + let (withdraw_cap, whitelist_cap) = issue_withdraw_and_whitelist_cap_impl(gateway, _cap, ctx); + transfer::transfer(withdraw_cap, tx_context::sender(ctx)); + transfer::transfer(whitelist_cap, tx_context::sender(ctx)); +} + +// pause pauses the deposit functionality +entry fun pause(gateway: &mut Gateway, cap: &AdminCap) { + pause_impl(gateway, cap) +} + +// unpause unpauses the deposit functionality +entry fun unpause(gateway: &mut Gateway, cap: &AdminCap) { + unpause_impl(gateway, cap) +} + +// reset_nonce resets the nonce to a new value in case it gets corrupted +entry fun reset_nonce(gateway: &mut Gateway, nonce: u64, _cap: &AdminCap) { + gateway.nonce = nonce; +} + +// === Deposit Functions === + +// deposit allows the user to deposit tokens into the gateway +public entry fun deposit( + gateway: &mut Gateway, + coins: Coin, + receiver: String, + ctx: &mut TxContext, +) { + let amount = coins.value(); + let coin_name = coin_name(); + + check_receiver_and_deposit_to_vault(gateway, coins, receiver); + + // Emit deposit event + event::emit(DepositEvent { + coin_type: coin_name, + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + }); +} + +// deposit_and_call allows the user to deposit tokens into the gateway and call a contract +public entry fun deposit_and_call( + gateway: &mut Gateway, + coins: Coin, + receiver: String, + payload: vector, + ctx: &mut TxContext, +) { + assert!(payload.length() <= PayloadMaxLength, EPayloadTooLong); + + let amount = coins.value(); + let coin_name = coin_name(); + + check_receiver_and_deposit_to_vault(gateway, coins, receiver); + + // Emit deposit event + event::emit(DepositAndCallEvent { + coin_type: coin_name, + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + payload: payload, + }); +} + +// check_receiver_and_deposit_to_vault is a helper function that checks the receiver address and deposits the coin +fun check_receiver_and_deposit_to_vault( + gateway: &mut Gateway, + coins: Coin, + receiver: String, +) { + assert!(evm::is_valid_evm_address(receiver), EInvalidReceiverAddress); + assert!(is_whitelisted(gateway), ENotWhitelisted); + assert!(!gateway.deposit_paused, EDepositPaused); + + // Deposit the coin into the vault + let coin_name = coin_name(); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); + balance::join(&mut vault.balance, coins.into_balance()); +} + +// === Withdraw Functions === + +public fun withdraw_impl( + gateway: &mut Gateway, + amount: u64, + nonce: u64, + gas_budget: u64, + cap: &WithdrawCap, + ctx: &mut TxContext, +): (Coin, Coin) { + assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); + assert!(is_whitelisted(gateway), ENotWhitelisted); + assert!(nonce == gateway.nonce, ENonceMismatch); // prevent replay + gateway.nonce = nonce + 1; + + // Withdraw the coin from the vault + let coin_name = coin_name(); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); + let coins_out = coin::take(&mut vault.balance, amount, ctx); + + // Withdraw SUI to cover the gas budget + let sui_vault = bag::borrow_mut>( + &mut gateway.vaults, + coin_name(), + ); + let coins_gas_budget = coin::take(&mut sui_vault.balance, gas_budget, ctx); + + (coins_out, coins_gas_budget) +} + +// === Admin Functions === + +public fun whitelist_impl(gateway: &mut Gateway, cap: &WhitelistCap) { + assert!(gateway.active_whitelist_cap == object::id(cap), EInactiveWhitelistCap); + assert!(is_whitelisted(gateway) == false, EAlreadyWhitelisted); + + // if the vault already exists, set it to whitelisted, otherwise create a new vault + if (bag::contains_with_type>(&gateway.vaults, coin_name())) { + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); + vault.whitelisted = true; + } else { + let vault_name = coin_name(); + let vault = Vault { + balance: balance::zero(), + whitelisted: true, + }; + bag::add(&mut gateway.vaults, vault_name, vault); + } +} + +public fun unwhitelist_impl(gateway: &mut Gateway, _cap: &AdminCap) { + assert!(is_whitelisted(gateway), ENotWhitelisted); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); + vault.whitelisted = false; +} + +public fun issue_withdraw_and_whitelist_cap_impl( + gateway: &mut Gateway, + _cap: &AdminCap, + ctx: &mut TxContext, +): (WithdrawCap, WhitelistCap) { + let withdraw_cap = WithdrawCap { + id: object::new(ctx), + }; + let whitelist_cap = WhitelistCap { + id: object::new(ctx), + }; + gateway.active_withdraw_cap = object::id(&withdraw_cap); + gateway.active_whitelist_cap = object::id(&whitelist_cap); + (withdraw_cap, whitelist_cap) +} + +public fun pause_impl(gateway: &mut Gateway, _cap: &AdminCap) { + gateway.deposit_paused = true; +} + +public fun unpause_impl(gateway: &mut Gateway, _cap: &AdminCap) { + gateway.deposit_paused = false; +} + +// === View Functions === + +public fun nonce(gateway: &Gateway): u64 { + gateway.nonce +} + +public fun active_withdraw_cap(gateway: &Gateway): ID { + gateway.active_withdraw_cap +} + +public fun active_whitelist_cap(gateway: &Gateway): ID { + gateway.active_whitelist_cap +} + +public fun vault_balance(gateway: &Gateway): u64 { + if (!is_whitelisted(gateway)) { + return 0 + }; + let coin_name = coin_name(); + let vault = bag::borrow>(&gateway.vaults, coin_name); + balance::value(&vault.balance) +} + +public fun is_paused(gateway: &Gateway): bool { + gateway.deposit_paused +} + +// is_whitelisted returns true if a given coin type is whitelisted +public fun is_whitelisted(gateway: &Gateway): bool { + let vault_name = coin_name(); + if (!bag::contains_with_type>(&gateway.vaults, vault_name)) { + return false + }; + let vault = bag::borrow>(&gateway.vaults, vault_name); + vault.whitelisted +} + +// === Helpers === + +// coin_name returns the name of the coin type to index the vault +fun coin_name(): String { + into_string(get()) +} + +// === Test Helpers === + +#[test_only] +public fun init_for_testing(ctx: &mut TxContext) { + init(ctx) +} + +#[test_only] +public fun create_test_withdraw_cap(ctx: &mut TxContext): WithdrawCap { + WithdrawCap { + id: object::new(ctx), + } +} + +#[test_only] +public fun create_test_whitelist_cap(ctx: &mut TxContext): WhitelistCap { + WhitelistCap { + id: object::new(ctx), + } +} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json b/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json new file mode 100644 index 0000000000..010ac8cca8 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json @@ -0,0 +1,10 @@ +{ + "name": "@zetachain/protocol-contracts-sui", + "private": false, + "license": "MIT", + "version": "0.0.0-set-on-publish", + "description": "ZetaChain protocol contracts on Sui", + "files": [ + "gateway.json" + ] +} \ No newline at end of file diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/evm.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/evm.move new file mode 100644 index 0000000000..f9847971b7 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/evm.move @@ -0,0 +1,46 @@ +module gateway::evm; + +use std::ascii::{String, into_bytes}; + +/// Check if a given string is a valid Ethereum address. +public fun is_valid_evm_address(addr: String): bool { + if (addr.length() != 42) { + return false + }; + + let mut addrBytes = addr.into_bytes(); + + // check prefix 0x, 0=48, x=120 + if (addrBytes[0] != 48 || addrBytes[1] != 120) { + return false + }; + + // remove 0x prefix + addrBytes.remove(0); + addrBytes.remove(0); + + // check if remaining characters are hex (0-9, a-f, A-F) + is_hex_vec(addrBytes) +} + +/// Check that vector contains only hex chars (0-9, a-f, A-F). +fun is_hex_vec(input: vector): bool { + let mut i = 0; + let len = input.length(); + + while (i < len) { + let c = input[i]; + + let is_hex = (c >= 48 && c <= 57) || // '0' to '9' + (c >= 97 && c <= 102) || // 'a' to 'f' + (c >= 65 && c <= 70); // 'A' to 'F' + + if (!is_hex) { + return false + }; + + i = i + 1; + }; + + true +} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/gateway.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/gateway.move new file mode 100644 index 0000000000..5397aca4e1 --- /dev/null +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/sources/gateway.move @@ -0,0 +1,417 @@ +module gateway::gateway; + +use gateway::evm; +use std::ascii::String; +use std::type_name::{get, into_string}; +use sui::bag::{Self, Bag}; +use sui::balance::{Self, Balance}; +use sui::coin::{Self, Coin}; +use sui::event; +use sui::sui::SUI; + +// === Errors === + +const EAlreadyWhitelisted: u64 = 0; +const EInvalidReceiverAddress: u64 = 1; +const ENotWhitelisted: u64 = 2; +const ENonceMismatch: u64 = 3; +const EPayloadTooLong: u64 = 4; +const EInactiveWithdrawCap: u64 = 5; +const EInactiveWhitelistCap: u64 = 6; +const EDepositPaused: u64 = 7; + +const PayloadMaxLength: u64 = 1024; + +// === Structs === + +// Vault stores the balance of a specific coin type +public struct Vault has store { + balance: Balance, + whitelisted: bool, +} + +// Gateway stores the vaults and the nonce for withdrawals +public struct Gateway has key { + id: UID, + vaults: Bag, + nonce: u64, + active_withdraw_cap: ID, + active_whitelist_cap: ID, + deposit_paused: bool, +} + +// WithdrawCap is a capability object that allows the caller to withdraw tokens from the gateway +public struct WithdrawCap has key, store { + id: UID, +} + +// WhitelistCap is a capability object that allows the caller to whitelist a new vault +public struct WhitelistCap has key, store { + id: UID, +} + +// AdminCap is a capability object that allows to issue new capabilities +public struct AdminCap has key, store { + id: UID, +} + +// === Events === + +// DepositEvent is emitted when a user deposits tokens into the gateway +public struct DepositEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: String, // 0x hex address +} + +// DepositAndCallEvent is emitted when a user deposits tokens into the gateway with a call +public struct DepositAndCallEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: String, // 0x hex address + payload: vector, +} + +public struct WithdrawEvent has copy, drop { + coin_type: String, + amount: u64, + sender: address, + receiver: address, + nonce: u64, +} + +public struct NonceIncreaseEvent has copy, drop { + sender: address, + nonce: u64, +} + +// === Initialization === + +fun init(ctx: &mut TxContext) { + // to withdraw tokens from the gateway, the caller must have the WithdrawCap + let withdraw_cap = WithdrawCap { + id: object::new(ctx), + }; + + // to whitelist a new vault, the caller must have the WhitelistCap + let whitelist_cap = WhitelistCap { + id: object::new(ctx), + }; + + // to whitelist a new vault, the caller must have the AdminCap + let admin_cap = AdminCap { + id: object::new(ctx), + }; + + // create and share the gateway object + let mut gateway = Gateway { + id: object::new(ctx), + vaults: bag::new(ctx), + nonce: 0, + active_withdraw_cap: object::id(&withdraw_cap), + active_whitelist_cap: object::id(&whitelist_cap), + deposit_paused: false, + }; + + // whitelist SUI by default + whitelist_impl(&mut gateway, &whitelist_cap); + + transfer::transfer(withdraw_cap, tx_context::sender(ctx)); + transfer::transfer(whitelist_cap, tx_context::sender(ctx)); + transfer::transfer(admin_cap, tx_context::sender(ctx)); + transfer::share_object(gateway); +} + +// === Entrypoints === + +// upgraded returns true to indicate gateway has been upgraded +entry fun upgraded(): bool { + true +} + +// increase_nonce increases the nonce of the gateway +// it is used when a failed outbound needs to be reported to ZetaChain +// it is sent by the tss and therefore requires the withdraw cap +entry fun increase_nonce(gateway: &mut Gateway, nonce: u64, cap: &WithdrawCap, ctx: &TxContext) { + assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); + assert!(nonce == gateway.nonce, ENonceMismatch); + gateway.nonce = nonce + 1; + + // Emit event + event::emit(NonceIncreaseEvent { + sender: tx_context::sender(ctx), + nonce: gateway.nonce, + }); +} + +// withdraw allows the TSS to withdraw tokens from the gateway +entry fun withdraw( + gateway: &mut Gateway, + amount: u64, + nonce: u64, + receiver: address, + gas_budget: u64, + cap: &WithdrawCap, + ctx: &mut TxContext, +) { + let (coins, coins_gas_budget) = withdraw_impl(gateway, amount, nonce, gas_budget, cap, ctx); + + transfer::public_transfer(coins, receiver); + transfer::public_transfer(coins_gas_budget, tx_context::sender(ctx)); + + // Emit event + event::emit(WithdrawEvent { + coin_type: coin_name(), + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + nonce: nonce, + }); +} + +// whitelist whitelists a new coin by creating a new vault for the coin type +entry fun whitelist(gateway: &mut Gateway, cap: &WhitelistCap) { + whitelist_impl(gateway, cap) +} + +// unwhitelist unwhitelists a coin by setting the whitelisted flag to false +entry fun unwhitelist(gateway: &mut Gateway, cap: &AdminCap) { + unwhitelist_impl(gateway, cap) +} + +// issue_withdraw_and_whitelist_cap issues a new WithdrawCap and WhitelistCap and revokes the old ones +entry fun issue_withdraw_and_whitelist_cap( + gateway: &mut Gateway, + _cap: &AdminCap, + ctx: &mut TxContext, +) { + let (withdraw_cap, whitelist_cap) = issue_withdraw_and_whitelist_cap_impl(gateway, _cap, ctx); + transfer::transfer(withdraw_cap, tx_context::sender(ctx)); + transfer::transfer(whitelist_cap, tx_context::sender(ctx)); +} + +// pause pauses the deposit functionality +entry fun pause(gateway: &mut Gateway, cap: &AdminCap) { + pause_impl(gateway, cap) +} + +// unpause unpauses the deposit functionality +entry fun unpause(gateway: &mut Gateway, cap: &AdminCap) { + unpause_impl(gateway, cap) +} + +// reset_nonce resets the nonce to a new value in case it gets corrupted +entry fun reset_nonce(gateway: &mut Gateway, nonce: u64, _cap: &AdminCap) { + gateway.nonce = nonce; +} + +// === Deposit Functions === + +// deposit allows the user to deposit tokens into the gateway +public entry fun deposit( + gateway: &mut Gateway, + coins: Coin, + receiver: String, + ctx: &mut TxContext, +) { + let amount = coins.value(); + let coin_name = coin_name(); + + check_receiver_and_deposit_to_vault(gateway, coins, receiver); + + // Emit deposit event + event::emit(DepositEvent { + coin_type: coin_name, + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + }); +} + +// deposit_and_call allows the user to deposit tokens into the gateway and call a contract +public entry fun deposit_and_call( + gateway: &mut Gateway, + coins: Coin, + receiver: String, + payload: vector, + ctx: &mut TxContext, +) { + assert!(payload.length() <= PayloadMaxLength, EPayloadTooLong); + + let amount = coins.value(); + let coin_name = coin_name(); + + check_receiver_and_deposit_to_vault(gateway, coins, receiver); + + // Emit deposit event + event::emit(DepositAndCallEvent { + coin_type: coin_name, + amount: amount, + sender: tx_context::sender(ctx), + receiver: receiver, + payload: payload, + }); +} + +// check_receiver_and_deposit_to_vault is a helper function that checks the receiver address and deposits the coin +fun check_receiver_and_deposit_to_vault( + gateway: &mut Gateway, + coins: Coin, + receiver: String, +) { + assert!(evm::is_valid_evm_address(receiver), EInvalidReceiverAddress); + assert!(is_whitelisted(gateway), ENotWhitelisted); + assert!(!gateway.deposit_paused, EDepositPaused); + + // Deposit the coin into the vault + let coin_name = coin_name(); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); + balance::join(&mut vault.balance, coins.into_balance()); +} + +// === Withdraw Functions === + +public fun withdraw_impl( + gateway: &mut Gateway, + amount: u64, + nonce: u64, + gas_budget: u64, + cap: &WithdrawCap, + ctx: &mut TxContext, +): (Coin, Coin) { + assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); + assert!(is_whitelisted(gateway), ENotWhitelisted); + assert!(nonce == gateway.nonce, ENonceMismatch); // prevent replay + gateway.nonce = nonce + 1; + + // Withdraw the coin from the vault + let coin_name = coin_name(); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); + let coins_out = coin::take(&mut vault.balance, amount, ctx); + + // Withdraw SUI to cover the gas budget + let sui_vault = bag::borrow_mut>( + &mut gateway.vaults, + coin_name(), + ); + let coins_gas_budget = coin::take(&mut sui_vault.balance, gas_budget, ctx); + + (coins_out, coins_gas_budget) +} + +// === Admin Functions === + +public fun whitelist_impl(gateway: &mut Gateway, cap: &WhitelistCap) { + assert!(gateway.active_whitelist_cap == object::id(cap), EInactiveWhitelistCap); + assert!(is_whitelisted(gateway) == false, EAlreadyWhitelisted); + + // if the vault already exists, set it to whitelisted, otherwise create a new vault + if (bag::contains_with_type>(&gateway.vaults, coin_name())) { + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); + vault.whitelisted = true; + } else { + let vault_name = coin_name(); + let vault = Vault { + balance: balance::zero(), + whitelisted: true, + }; + bag::add(&mut gateway.vaults, vault_name, vault); + } +} + +public fun unwhitelist_impl(gateway: &mut Gateway, _cap: &AdminCap) { + assert!(is_whitelisted(gateway), ENotWhitelisted); + let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); + vault.whitelisted = false; +} + +public fun issue_withdraw_and_whitelist_cap_impl( + gateway: &mut Gateway, + _cap: &AdminCap, + ctx: &mut TxContext, +): (WithdrawCap, WhitelistCap) { + let withdraw_cap = WithdrawCap { + id: object::new(ctx), + }; + let whitelist_cap = WhitelistCap { + id: object::new(ctx), + }; + gateway.active_withdraw_cap = object::id(&withdraw_cap); + gateway.active_whitelist_cap = object::id(&whitelist_cap); + (withdraw_cap, whitelist_cap) +} + +public fun pause_impl(gateway: &mut Gateway, _cap: &AdminCap) { + gateway.deposit_paused = true; +} + +public fun unpause_impl(gateway: &mut Gateway, _cap: &AdminCap) { + gateway.deposit_paused = false; +} + +// === View Functions === + +public fun nonce(gateway: &Gateway): u64 { + gateway.nonce +} + +public fun active_withdraw_cap(gateway: &Gateway): ID { + gateway.active_withdraw_cap +} + +public fun active_whitelist_cap(gateway: &Gateway): ID { + gateway.active_whitelist_cap +} + +public fun vault_balance(gateway: &Gateway): u64 { + if (!is_whitelisted(gateway)) { + return 0 + }; + let coin_name = coin_name(); + let vault = bag::borrow>(&gateway.vaults, coin_name); + balance::value(&vault.balance) +} + +public fun is_paused(gateway: &Gateway): bool { + gateway.deposit_paused +} + +// is_whitelisted returns true if a given coin type is whitelisted +public fun is_whitelisted(gateway: &Gateway): bool { + let vault_name = coin_name(); + if (!bag::contains_with_type>(&gateway.vaults, vault_name)) { + return false + }; + let vault = bag::borrow>(&gateway.vaults, vault_name); + vault.whitelisted +} + +// === Helpers === + +// coin_name returns the name of the coin type to index the vault +fun coin_name(): String { + into_string(get()) +} + +// === Test Helpers === + +#[test_only] +public fun init_for_testing(ctx: &mut TxContext) { + init(ctx) +} + +#[test_only] +public fun create_test_withdraw_cap(ctx: &mut TxContext): WithdrawCap { + WithdrawCap { + id: object::new(ctx), + } +} + +#[test_only] +public fun create_test_whitelist_cap(ctx: &mut TxContext): WhitelistCap { + WhitelistCap { + id: object::new(ctx), + } +} diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index 4c7b5a4b51..d26156d15b 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -15,8 +15,8 @@ import ( ) const ( - // suiUpgradedGatewayPath is the path to the upgraded Sui gateway package - suiUpgradedGatewayPath = "/work/protocol-contracts-sui" + // suiGatewayUpgradedPath is the path to the upgraded Sui gateway package + suiGatewayUpgradedPath = "/work/protocol-contracts-sui-upgrade" ) // reGatewayPackageID is the regex to extract the gateway package ID from the output @@ -62,7 +62,7 @@ func (r *E2ERunner) upgradeSuiGatewayPackage() (string, error) { "--upgrade-capability", r.SuiGatewayUpgradeCap, }...) - cmdUpgrade.Dir = suiUpgradedGatewayPath + cmdUpgrade.Dir = suiGatewayUpgradedPath // run command and show output startTime := time.Now() @@ -107,7 +107,7 @@ func (r *E2ERunner) moveCallUpgraded(ctx context.Context, gatewayPackageID strin // updateGatewayPackageIDInMoveToml updates the 'published-at' field in the 'Move.toml' file // with the original published gateway package ID func (r *E2ERunner) updateGatewayPackageIDInMoveToml() { - const moveTomlPath = suiUpgradedGatewayPath + "/Move.toml" + const moveTomlPath = suiGatewayUpgradedPath + "/Move.toml" // read the entire Move.toml file content, err := os.ReadFile(moveTomlPath) From ae3d2c728f062017107dce87516956c32244b737 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 12:11:39 -0500 Subject: [PATCH 04/13] add private key length check in conversion --- pkg/contracts/sui/crypto.go | 4 ++++ pkg/contracts/sui/crypto_test.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pkg/contracts/sui/crypto.go b/pkg/contracts/sui/crypto.go index 7c6605b4e6..c28754d3d6 100644 --- a/pkg/contracts/sui/crypto.go +++ b/pkg/contracts/sui/crypto.go @@ -139,6 +139,10 @@ func PrivateKeyBech32Secp256k1FromHex(privKeyHex string) (string, error) { return "", errors.Wrap(err, "failed to decode private key hex") } + if len(privKeyBytes) != 32 { + return "", errors.Errorf("invalid private key length %d)", len(privKeyBytes)) + } + // add secp256k1 flag privKeyBytes = append([]byte{flagSecp256k1}, privKeyBytes...) diff --git a/pkg/contracts/sui/crypto_test.go b/pkg/contracts/sui/crypto_test.go index 212e32a1fe..4aef72b96a 100644 --- a/pkg/contracts/sui/crypto_test.go +++ b/pkg/contracts/sui/crypto_test.go @@ -125,6 +125,10 @@ func TestCrypto(t *testing.T) { privKeyHex: "invalid", errMsg: "failed to decode private key hex", }, + { + privKeyHex: "abcdef", + errMsg: "invalid private key length", + }, } { t.Run(tt.privKeyHex, func(t *testing.T) { privKey, err := PrivateKeyBech32Secp256k1FromHex(tt.privKeyHex) From 3f18678fa945a2be2684923ac64b676da9df5a76 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 12:52:10 -0500 Subject: [PATCH 05/13] group gateway upgrade test in a sub function --- cmd/zetae2e/local/local.go | 44 ++++++++++++---------------- e2e/runner/solana_gateway_upgrade.go | 4 +-- e2e/runner/sui_gateway_upgrade.go | 4 +-- e2e/runner/upgrade.go | 21 +++++++++++++ 4 files changed, 44 insertions(+), 29 deletions(-) diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index c676a8edca..54f7077587 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -13,7 +13,6 @@ import ( "github.com/fatih/color" "github.com/spf13/cobra" - "github.com/stretchr/testify/require" zetae2econfig "github.com/zeta-chain/node/cmd/zetae2e/config" "github.com/zeta-chain/node/e2e/config" @@ -518,20 +517,20 @@ func localE2ETest(cmd *cobra.Command, _ []string) { if testSui { suiTests := []string{ e2etests.TestSuiDepositName, - // e2etests.TestSuiDepositAndCallRevertName, - // e2etests.TestSuiDepositAndCallName, - // e2etests.TestSuiTokenDepositName, - // e2etests.TestSuiTokenDepositAndCallName, - // e2etests.TestSuiTokenDepositAndCallRevertName, - // e2etests.TestSuiWithdrawName, - // e2etests.TestSuiWithdrawAndCallName, - // e2etests.TestSuiWithdrawRevertWithCallName, - // e2etests.TestSuiWithdrawAndCallRevertWithCallName, - // e2etests.TestSuiTokenWithdrawName, - // e2etests.TestSuiTokenWithdrawAndCallName, - // e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, - // e2etests.TestSuiDepositRestrictedName, - // e2etests.TestSuiWithdrawRestrictedName, + e2etests.TestSuiDepositAndCallRevertName, + e2etests.TestSuiDepositAndCallName, + e2etests.TestSuiTokenDepositName, + e2etests.TestSuiTokenDepositAndCallName, + e2etests.TestSuiTokenDepositAndCallRevertName, + e2etests.TestSuiWithdrawName, + e2etests.TestSuiWithdrawAndCallName, + e2etests.TestSuiWithdrawRevertWithCallName, + e2etests.TestSuiWithdrawAndCallRevertWithCallName, + e2etests.TestSuiTokenWithdrawName, + e2etests.TestSuiTokenWithdrawAndCallName, + e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, + e2etests.TestSuiDepositRestrictedName, + e2etests.TestSuiWithdrawRestrictedName, } eg.Go(suiTestRoutine(conf, deployerRunner, verbose, suiTests...)) } @@ -618,16 +617,11 @@ func localE2ETest(cmd *cobra.Command, _ []string) { logger.Print("✅ e2e tests completed in %s", time.Since(testStartTime).String()) - if testSolana { - require.True( - deployerRunner, - deployerRunner.VerifySolanaContractsUpgrade(conf.AdditionalAccounts.UserSolana.SolanaPrivateKey.String()), - ) - } - - if testSui { - deployerRunner.VerifySuiGatewayPackageUpgrade() - } + // Run gateway upgrade tests for external chains + deployerRunner.UpgradeAndVerifyGatewayExternalChains(conf, runner.UpgradeGatewayTestOptions{ + TestSolana: testSolana, + TestSui: testSui, + }) if testTSSMigration { TSSMigration(deployerRunner, logger, verbose, conf) diff --git a/e2e/runner/solana_gateway_upgrade.go b/e2e/runner/solana_gateway_upgrade.go index 9daeec001c..ee6027b036 100644 --- a/e2e/runner/solana_gateway_upgrade.go +++ b/e2e/runner/solana_gateway_upgrade.go @@ -16,8 +16,8 @@ import ( solanacontracts "github.com/zeta-chain/node/pkg/contracts/solana" ) -// VerifySolanaContractsUpgrade checks if the Solana contracts are upgraded -func (r *E2ERunner) VerifySolanaContractsUpgrade(deployerPrivateKey string) bool { +// SolanaVerifyGatewayContractsUpgrade upgrades the Solana contracts and verifies the upgrade +func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey string) bool { pdaComputed := r.ComputePdaAddress() pdaInfo, err := r.SolanaClient.GetAccountInfoWithOpts(r.Ctx, pdaComputed, &rpc.GetAccountInfoOpts{ Commitment: rpc.CommitmentConfirmed, diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index d26156d15b..0e4c2d2c18 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -31,8 +31,8 @@ const ( // ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ var reGatewayPackageID = regexp.MustCompile(`│\s*PackageID: *(0x[0-9a-fA-F]+)\s*│`) -// VerifySuiGatewayPackageUpgrade upgrades the Sui gateway package and verifies the upgrade -func (r *E2ERunner) VerifySuiGatewayPackageUpgrade() { +// SuiVerifyGatewayPackageUpgrade upgrades the Sui gateway package and verifies the upgrade +func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { // retrieve original gateway object data gatewayDataBefore, err := r.getObjectData(r.Ctx, r.SuiGateway.ObjectID()) require.NoError(r, err) diff --git a/e2e/runner/upgrade.go b/e2e/runner/upgrade.go index 6b1cdba6be..73e40fca64 100644 --- a/e2e/runner/upgrade.go +++ b/e2e/runner/upgrade.go @@ -7,9 +7,16 @@ import ( "github.com/zeta-chain/protocol-contracts/pkg/gatewayevm.sol" "github.com/zeta-chain/protocol-contracts/pkg/gatewayzevm.sol" + "github.com/zeta-chain/node/e2e/config" "github.com/zeta-chain/node/e2e/utils" ) +// UpgradeGatewayTestOptions is the options for the gateway upgrade tests +type UpgradeGatewayTestOptions struct { + TestSolana bool + TestSui bool +} + // UpgradeGatewaysAndERC20Custody upgrades gateways and ERC20Custody contracts // It deploys new contract implementation with the current imported artifacts and upgrades the contract func (r *E2ERunner) UpgradeGatewaysAndERC20Custody() { @@ -18,6 +25,20 @@ func (r *E2ERunner) UpgradeGatewaysAndERC20Custody() { r.UpgradeERC20Custody() } +// UpgradeGatewayExternalChains upgrades the gateway contract on external chains +func (r *E2ERunner) UpgradeAndVerifyGatewayExternalChains(conf config.Config, opts UpgradeGatewayTestOptions) { + if opts.TestSolana { + require.True( + r, + r.SolanaVerifyGatewayContractsUpgrade(conf.AdditionalAccounts.UserSolana.SolanaPrivateKey.String()), + ) + } + + if opts.TestSui { + r.SuiVerifyGatewayPackageUpgrade() + } +} + // UpgradeGatewayZEVM upgrades the GatewayZEVM contract func (r *E2ERunner) UpgradeGatewayZEVM() { ensureTxReceipt := func(tx *ethtypes.Transaction, failMessage string) { From 5106a77ad2aefe9fd8e13cd3fb621773fb2af9c9 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 13:04:38 -0500 Subject: [PATCH 06/13] improve naming and add back deleted e2e log print --- e2e/config/config.go | 5 +++-- e2e/runner/runner.go | 1 + e2e/runner/setup_sui.go | 10 +++++----- e2e/runner/sui_gateway_upgrade.go | 12 ++++++------ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/e2e/config/config.go b/e2e/config/config.go index 18728018f0..f988efa5ce 100644 --- a/e2e/config/config.go +++ b/e2e/config/config.go @@ -155,8 +155,9 @@ type SuiExample struct { // Sui contains the addresses of predeployed contracts on the Sui chain type Sui struct { - GatewayPackageID DoubleQuotedString `yaml:"gateway_package_id"` - GatewayObjectID DoubleQuotedString `yaml:"gateway_object_id"` + GatewayPackageID DoubleQuotedString `yaml:"gateway_package_id"` + GatewayObjectID DoubleQuotedString `yaml:"gateway_object_id"` + // GatewayUpgradeCap is the capability object used to upgrade the gateway GatewayUpgradeCap DoubleQuotedString `yaml:"gateway_upgrade_cap"` FungibleTokenCoinType DoubleQuotedString `yaml:"fungible_token_coin_type"` FungibleTokenTreasuryCap DoubleQuotedString `yaml:"fungible_token_treasury_cap"` diff --git a/e2e/runner/runner.go b/e2e/runner/runner.go index 80d92e138f..56507755b3 100644 --- a/e2e/runner/runner.go +++ b/e2e/runner/runner.go @@ -441,6 +441,7 @@ func (r *E2ERunner) PrintContractAddresses() { r.Logger.Print("ERC20ZRC20: %s", r.ERC20ZRC20Addr.Hex()) r.Logger.Print("BTCZRC20: %s", r.BTCZRC20Addr.Hex()) r.Logger.Print("SOLZRC20: %s", r.SOLZRC20Addr.Hex()) + r.Logger.Print("SPLZRC20: %s", r.SPLZRC20Addr.Hex()) r.Logger.Print("TONZRC20: %s", r.TONZRC20Addr.Hex()) r.Logger.Print("SUIZRC20: %s", r.SUIZRC20Addr.Hex()) r.Logger.Print("SuiTokenZRC20: %s", r.SuiTokenZRC20Addr.Hex()) diff --git a/e2e/runner/setup_sui.go b/e2e/runner/setup_sui.go index 05b2736b03..9ece8ac35c 100644 --- a/e2e/runner/setup_sui.go +++ b/e2e/runner/setup_sui.go @@ -47,7 +47,7 @@ func (r *E2ERunner) SetupSui(faucetURL string) { r.RequestSuiFromFaucet(faucetURL, deployerAddress) // import deployer private key and select it as active address - r.importAndActivateDeployerAccount() + r.suiSetupDeployerAccount() // fund the TSS // request twice from the faucet to ensure TSS has enough funds for the first withdraw @@ -59,7 +59,7 @@ func (r *E2ERunner) SetupSui(faucetURL string) { whitelistCapID, withdrawCapID := r.suiDeployGateway() // update gateway package ID in Move.toml - r.updateGatewayPackageIDInMoveToml() + r.suiPatchMoveConfig() // deploy SUI zrc20 r.deploySUIZRC20() @@ -79,11 +79,11 @@ func (r *E2ERunner) SetupSui(faucetURL string) { require.NoError(r, err) } -// importAndActivateDeployerAccount imports a Sui deployer private key using the sui keytool import command +// suiSetupDeployerAccount imports a Sui deployer private key using the sui keytool import command // and sets the deployer address as the active address. -func (r *E2ERunner) importAndActivateDeployerAccount() { +func (r *E2ERunner) suiSetupDeployerAccount() { deployerSigner, err := r.Account.SuiSigner() - require.NoError(r, err, "get deployer signer") + require.NoError(r, err, "unable to get deployer signer") var ( deployerAddress = deployerSigner.Address() diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index 0e4c2d2c18..fc5d0e32c2 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -34,7 +34,7 @@ var reGatewayPackageID = regexp.MustCompile(`│\s*PackageID: *(0x[0-9a-fA-F]+)\ // SuiVerifyGatewayPackageUpgrade upgrades the Sui gateway package and verifies the upgrade func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { // retrieve original gateway object data - gatewayDataBefore, err := r.getObjectData(r.Ctx, r.SuiGateway.ObjectID()) + gatewayDataBefore, err := r.suiGetObjectData(r.Ctx, r.SuiGateway.ObjectID()) require.NoError(r, err) // upgrade the Sui gateway package @@ -45,7 +45,7 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { r.moveCallUpgraded(r.Ctx, newGatewayPackageID) // retrieve new gateway object data - gatewayDataAfter, err := r.getObjectData(r.Ctx, r.SuiGateway.ObjectID()) + gatewayDataAfter, err := r.suiGetObjectData(r.Ctx, r.SuiGateway.ObjectID()) require.NoError(r, err) // gateway data should remain unchanged @@ -104,9 +104,9 @@ func (r *E2ERunner) moveCallUpgraded(ctx context.Context, gatewayPackageID strin r.suiExecuteTx(signer, tx) } -// updateGatewayPackageIDInMoveToml updates the 'published-at' field in the 'Move.toml' file +// suiPatchMoveConfig updates the 'published-at' field in the 'Move.toml' file // with the original published gateway package ID -func (r *E2ERunner) updateGatewayPackageIDInMoveToml() { +func (r *E2ERunner) suiPatchMoveConfig() { const moveTomlPath = suiGatewayUpgradedPath + "/Move.toml" // read the entire Move.toml file @@ -123,8 +123,8 @@ func (r *E2ERunner) updateGatewayPackageIDInMoveToml() { require.NoError(r, err, "unable to write to Move.toml") } -// getObjectData retrieves the object data from the Sui gateway package -func (r *E2ERunner) getObjectData(ctx context.Context, objectID string) (models.SuiParsedData, error) { +// suiGetObjectData retrieves the object data for the given object ID +func (r *E2ERunner) suiGetObjectData(ctx context.Context, objectID string) (models.SuiParsedData, error) { object, err := r.Clients.Sui.SuiGetObject(ctx, models.SuiGetObjectRequest{ ObjectId: objectID, Options: models.SuiObjectDataOptions{ShowContent: true}, From 123e72b4dd063a0b4895d2383682094a71bec016 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 13:21:35 -0500 Subject: [PATCH 07/13] fix gosec errors --- e2e/runner/setup_sui.go | 3 +++ e2e/runner/sui_gateway_upgrade.go | 1 + 2 files changed, 4 insertions(+) diff --git a/e2e/runner/setup_sui.go b/e2e/runner/setup_sui.go index 9ece8ac35c..65f3726f1e 100644 --- a/e2e/runner/setup_sui.go +++ b/e2e/runner/setup_sui.go @@ -95,14 +95,17 @@ func (r *E2ERunner) suiSetupDeployerAccount() { require.NoError(r, err) // import deployer private key using sui keytool import + // #nosec G204, inputs are controlled in E2E test cmdImport := exec.Command("sui", "keytool", "import", deployerPrivKeySecp256k1, "secp256k1") require.NoError(r, cmdImport.Run(), "unable to import sui deployer private key") // switch to deployer address using sui client switch + // #nosec G204, inputs are controlled in E2E test cmdSwitch := exec.Command("sui", "client", "switch", "--address", deployerAddress) require.NoError(r, cmdSwitch.Run(), "unable to switch to deployer address") // ensure the deployer address is active + // #nosec G204, inputs are controlled in E2E test cmdList := exec.Command("sui", "client", "active-address") output, err := cmdList.Output() require.NoError(r, err) diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index fc5d0e32c2..a9ebbd3a6d 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -55,6 +55,7 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { // upgradeSuiGatewayPackage upgrades the Sui gateway package by deploying new compiled gateway package func (r *E2ERunner) upgradeSuiGatewayPackage() (string, error) { // construct the CLI command for package upgrade + // #nosec G204, inputs are controlled in E2E test cmdUpgrade := exec.Command("sui", []string{ "client", "upgrade", From 77306ac8937350031a77c616082774d46d0b1eba Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 16:35:16 -0500 Subject: [PATCH 08/13] move sui client.yaml copying to Dockerfile; improve naming --- contrib/localnet/orchestrator/Dockerfile.fastbuild | 2 +- contrib/localnet/orchestrator/start-zetae2e.sh | 6 ------ e2e/runner/sui_gateway_upgrade.go | 6 +++--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/contrib/localnet/orchestrator/Dockerfile.fastbuild b/contrib/localnet/orchestrator/Dockerfile.fastbuild index cd19ece2fd..554c0a7d72 100644 --- a/contrib/localnet/orchestrator/Dockerfile.fastbuild +++ b/contrib/localnet/orchestrator/Dockerfile.fastbuild @@ -13,7 +13,7 @@ COPY contrib/localnet/orchestrator/start-zetae2e.sh /work/ COPY contrib/localnet/orchestrator/proposals_e2e_start/ /work/proposals_e2e_start/ COPY contrib/localnet/orchestrator/proposals_e2e_end/ /work/proposals_e2e_end/ COPY contrib/localnet/scripts/wait-for-ton.sh /work/ -COPY contrib/localnet/sui/sui_client.yaml /work/ +COPY contrib/localnet/sui/sui_client.yaml /root/.sui/sui_config/client.yaml COPY e2e/contracts/sui/protocol-contracts-sui-upgrade /work/protocol-contracts-sui-upgrade COPY cmd/zetae2e/config/localnet.yml /work/config.yml diff --git a/contrib/localnet/orchestrator/start-zetae2e.sh b/contrib/localnet/orchestrator/start-zetae2e.sh index 6dae9b07b1..01c64a0145 100644 --- a/contrib/localnet/orchestrator/start-zetae2e.sh +++ b/contrib/localnet/orchestrator/start-zetae2e.sh @@ -183,12 +183,6 @@ if host ton > /dev/null; then ./wait-for-ton.sh fi -# Setup Sui environment -if host sui > /dev/null; then - mkdir -p /root/.sui/sui_config - cp sui_client.yaml /root/.sui/sui_config/client.yaml -fi - [[ -n $CI ]] && echo -e "\n::endgroup::" # need to make the directory if it was not mounted as a volume diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index a9ebbd3a6d..739f3967c6 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -38,7 +38,7 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { require.NoError(r, err) // upgrade the Sui gateway package - newGatewayPackageID, err := r.upgradeSuiGatewayPackage() + newGatewayPackageID, err := r.suiUpgradeGatewayPackage() require.NoError(r, err) // call the new method 'upgraded' in the new gateway package @@ -52,8 +52,8 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { require.Equal(r, gatewayDataBefore, gatewayDataAfter) } -// upgradeSuiGatewayPackage upgrades the Sui gateway package by deploying new compiled gateway package -func (r *E2ERunner) upgradeSuiGatewayPackage() (string, error) { +// suiUpgradeGatewayPackage upgrades the Sui gateway package by deploying new compiled gateway package +func (r *E2ERunner) suiUpgradeGatewayPackage() (packageID string, err error) { // construct the CLI command for package upgrade // #nosec G204, inputs are controlled in E2E test cmdUpgrade := exec.Command("sui", []string{ From f7ffadc8cfe647fcdad2f42e553ce5cfb5f46a59 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 17:59:59 -0500 Subject: [PATCH 09/13] output sui gateway upgrade response in JSON format to extract package ID in a reliable way --- cmd/zetae2e/local/local.go | 12 ++++----- e2e/runner/solana_gateway_upgrade.go | 2 ++ e2e/runner/sui_gateway_upgrade.go | 39 ++++++++++++---------------- e2e/runner/upgrade.go | 8 +++--- 4 files changed, 28 insertions(+), 33 deletions(-) diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index 54f7077587..2fa6f10119 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -603,6 +603,12 @@ func localE2ETest(cmd *cobra.Command, _ []string) { noError(deployerRunner.WithdrawEmissions()) + // Run gateway upgrade tests for external chains + deployerRunner.RunGatewayUpgradeTestsExternalChains(conf, runner.UpgradeGatewayOptions{ + TestSolana: testSolana, + TestSui: testSui, + }) + // if all tests pass, cancel txs priority monitoring and check if tx priority is not correct in some blocks logger.Print("⏳ e2e tests passed, checking tx priority") monitorPriorityCancel() @@ -617,12 +623,6 @@ func localE2ETest(cmd *cobra.Command, _ []string) { logger.Print("✅ e2e tests completed in %s", time.Since(testStartTime).String()) - // Run gateway upgrade tests for external chains - deployerRunner.UpgradeAndVerifyGatewayExternalChains(conf, runner.UpgradeGatewayTestOptions{ - TestSolana: testSolana, - TestSui: testSui, - }) - if testTSSMigration { TSSMigration(deployerRunner, logger, verbose, conf) } diff --git a/e2e/runner/solana_gateway_upgrade.go b/e2e/runner/solana_gateway_upgrade.go index ee6027b036..0ef0959e2d 100644 --- a/e2e/runner/solana_gateway_upgrade.go +++ b/e2e/runner/solana_gateway_upgrade.go @@ -18,6 +18,8 @@ import ( // SolanaVerifyGatewayContractsUpgrade upgrades the Solana contracts and verifies the upgrade func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey string) bool { + r.Logger.Print("🏃 Upgrading Solana gateway contracts") + pdaComputed := r.ComputePdaAddress() pdaInfo, err := r.SolanaClient.GetAccountInfoWithOpts(r.Ctx, pdaComputed, &rpc.GetAccountInfoOpts{ Commitment: rpc.CommitmentConfirmed, diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index 739f3967c6..0c4392755a 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -1,11 +1,10 @@ package runner import ( - "bufio" "context" + "encoding/json" "os" "os/exec" - "regexp" "strings" "time" @@ -19,20 +18,10 @@ const ( suiGatewayUpgradedPath = "/work/protocol-contracts-sui-upgrade" ) -// reGatewayPackageID is the regex to extract the gateway package ID from the output -// -// │ Published Objects: │ -// │ ┌── │ -// │ │ PackageID: 0x67500cf6e39f3d8937c4f15a298da72358410c84357ee33e0030c13872f5339e │ -// │ │ Version: 2 │ -// │ │ Digest: 9sLQJdSZcQp8jHVJenBGKjipxspLKZ1P4QBnTxffA4Gb │ -// │ │ Modules: evm, gateway │ -// │ └── │ -// ╰──────────────────────────────────────────────────────────────────────────────────────────────────╯ -var reGatewayPackageID = regexp.MustCompile(`│\s*PackageID: *(0x[0-9a-fA-F]+)\s*│`) - // SuiVerifyGatewayPackageUpgrade upgrades the Sui gateway package and verifies the upgrade func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { + r.Logger.Print("🏃 Upgrading Sui gateway package") + // retrieve original gateway object data gatewayDataBefore, err := r.suiGetObjectData(r.Ctx, r.SuiGateway.ObjectID()) require.NoError(r, err) @@ -41,6 +30,8 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { newGatewayPackageID, err := r.suiUpgradeGatewayPackage() require.NoError(r, err) + r.Logger.Print("⚙️ Sui gateway package upgrade completed") + // call the new method 'upgraded' in the new gateway package r.moveCallUpgraded(r.Ctx, newGatewayPackageID) @@ -59,6 +50,7 @@ func (r *E2ERunner) suiUpgradeGatewayPackage() (packageID string, err error) { cmdUpgrade := exec.Command("sui", []string{ "client", "upgrade", + "--json", // output in JSON format for easier parsing "--skip-dependency-verification", "--upgrade-capability", r.SuiGatewayUpgradeCap, @@ -70,16 +62,17 @@ func (r *E2ERunner) suiUpgradeGatewayPackage() (packageID string, err error) { output, err := cmdUpgrade.Output() require.NoError(r, err) - r.Logger.Info("sui gateway package upgrade took %f seconds: \n%s", time.Since(startTime).Seconds(), string(output)) + r.Logger.Info("Sui gateway package upgrade took %f seconds: \n%s", time.Since(startTime).Seconds(), string(output)) + + // convert output to transaction block response struct + response := &models.SuiTransactionBlockResponse{} + err = json.Unmarshal(output, response) + require.NoError(r, err) - // scan through the output line by line to find the new gateway package ID - scanner := bufio.NewScanner(strings.NewReader(string(output))) - for scanner.Scan() { - line := scanner.Text() - matches := reGatewayPackageID.FindStringSubmatch(line) - if len(matches) >= 2 { - // return the first capture group which contains the PackageID - return matches[1], nil + // find packageID + for _, change := range response.ObjectChanges { + if change.Type == "published" { + return change.PackageId, nil } } diff --git a/e2e/runner/upgrade.go b/e2e/runner/upgrade.go index 73e40fca64..24b3085f7d 100644 --- a/e2e/runner/upgrade.go +++ b/e2e/runner/upgrade.go @@ -11,8 +11,8 @@ import ( "github.com/zeta-chain/node/e2e/utils" ) -// UpgradeGatewayTestOptions is the options for the gateway upgrade tests -type UpgradeGatewayTestOptions struct { +// UpgradeGatewayOptions is the options for the gateway upgrade tests +type UpgradeGatewayOptions struct { TestSolana bool TestSui bool } @@ -25,8 +25,8 @@ func (r *E2ERunner) UpgradeGatewaysAndERC20Custody() { r.UpgradeERC20Custody() } -// UpgradeGatewayExternalChains upgrades the gateway contract on external chains -func (r *E2ERunner) UpgradeAndVerifyGatewayExternalChains(conf config.Config, opts UpgradeGatewayTestOptions) { +// RunGatewayUpgradeTestsExternalChains runs the gateway upgrade tests for external chains +func (r *E2ERunner) RunGatewayUpgradeTestsExternalChains(conf config.Config, opts UpgradeGatewayOptions) { if opts.TestSolana { require.True( r, From 195d3c65f29e067506c14d3e4ade5dfaf863f715 Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 18:21:42 -0500 Subject: [PATCH 10/13] minimize the number of files for sui upgrade test --- cmd/zetae2e/local/local.go | 28 +- .../protocol-contracts-sui-upgrade/.gitignore | 4 +- .../protocol-contracts-sui-upgrade/Move.lock | 34 -- .../build/gateway/BuildInfo.yaml | 72 --- .../dependencies/MoveStdlib/address.mv | Bin 101 -> 0 bytes .../dependencies/MoveStdlib/ascii.mv | Bin 1846 -> 0 bytes .../dependencies/MoveStdlib/bcs.mv | Bin 92 -> 0 bytes .../dependencies/MoveStdlib/bit_vector.mv | Bin 802 -> 0 bytes .../dependencies/MoveStdlib/bool.mv | Bin 58 -> 0 bytes .../dependencies/MoveStdlib/debug.mv | Bin 116 -> 0 bytes .../dependencies/MoveStdlib/fixed_point32.mv | Bin 598 -> 0 bytes .../dependencies/MoveStdlib/hash.mv | Bin 106 -> 0 bytes .../dependencies/MoveStdlib/macros.mv | Bin 60 -> 0 bytes .../dependencies/MoveStdlib/option.mv | Bin 1136 -> 0 bytes .../dependencies/MoveStdlib/string.mv | Bin 1064 -> 0 bytes .../dependencies/MoveStdlib/type_name.mv | Bin 1144 -> 0 bytes .../dependencies/MoveStdlib/u128.mv | Bin 1286 -> 0 bytes .../dependencies/MoveStdlib/u16.mv | Bin 818 -> 0 bytes .../dependencies/MoveStdlib/u256.mv | Bin 1400 -> 0 bytes .../dependencies/MoveStdlib/u32.mv | Bin 919 -> 0 bytes .../dependencies/MoveStdlib/u64.mv | Bin 1060 -> 0 bytes .../dependencies/MoveStdlib/u8.mv | Bin 674 -> 0 bytes .../dependencies/MoveStdlib/uq32_32.mv | Bin 1233 -> 0 bytes .../dependencies/MoveStdlib/uq64_64.mv | Bin 1337 -> 0 bytes .../dependencies/MoveStdlib/vector.mv | Bin 1232 -> 0 bytes .../dependencies/Sui/address.mv | Bin 763 -> 0 bytes .../dependencies/Sui/authenticator_state.mv | Bin 3000 -> 0 bytes .../bytecode_modules/dependencies/Sui/bag.mv | Bin 748 -> 0 bytes .../dependencies/Sui/balance.mv | Bin 1221 -> 0 bytes .../bytecode_modules/dependencies/Sui/bcs.mv | Bin 3108 -> 0 bytes .../dependencies/Sui/bls12381.mv | Bin 3781 -> 0 bytes .../dependencies/Sui/borrow.mv | Bin 638 -> 0 bytes .../dependencies/Sui/clock.mv | Bin 418 -> 0 bytes .../bytecode_modules/dependencies/Sui/coin.mv | Bin 4173 -> 0 bytes .../dependencies/Sui/config.mv | Bin 1969 -> 0 bytes .../dependencies/Sui/deny_list.mv | Bin 4815 -> 0 bytes .../dependencies/Sui/display.mv | Bin 1378 -> 0 bytes .../dependencies/Sui/dynamic_field.mv | Bin 1309 -> 0 bytes .../dependencies/Sui/dynamic_object_field.mv | Bin 1381 -> 0 bytes .../dependencies/Sui/ecdsa_k1.mv | Bin 222 -> 0 bytes .../dependencies/Sui/ecdsa_r1.mv | Bin 180 -> 0 bytes .../dependencies/Sui/ecvrf.mv | Bin 138 -> 0 bytes .../dependencies/Sui/ed25519.mv | Bin 106 -> 0 bytes .../dependencies/Sui/event.mv | Bin 87 -> 0 bytes .../dependencies/Sui/groth16.mv | Bin 902 -> 0 bytes .../dependencies/Sui/group_ops.mv | Bin 1597 -> 0 bytes .../bytecode_modules/dependencies/Sui/hash.mv | Bin 113 -> 0 bytes .../bytecode_modules/dependencies/Sui/hex.mv | Bin 1322 -> 0 bytes .../bytecode_modules/dependencies/Sui/hmac.mv | Bin 100 -> 0 bytes .../dependencies/Sui/kiosk.mv | Bin 4293 -> 0 bytes .../dependencies/Sui/kiosk_extension.mv | Bin 1507 -> 0 bytes .../dependencies/Sui/linked_table.mv | Bin 1681 -> 0 bytes .../bytecode_modules/dependencies/Sui/math.mv | Bin 334 -> 0 bytes .../dependencies/Sui/nitro_attestation.mv | Bin 680 -> 0 bytes .../dependencies/Sui/object.mv | Bin 1346 -> 0 bytes .../dependencies/Sui/object_bag.mv | Bin 873 -> 0 bytes .../dependencies/Sui/object_table.mv | Bin 863 -> 0 bytes .../dependencies/Sui/package.mv | Bin 1809 -> 0 bytes .../bytecode_modules/dependencies/Sui/pay.mv | Bin 835 -> 0 bytes .../dependencies/Sui/poseidon.mv | Bin 404 -> 0 bytes .../dependencies/Sui/priority_queue.mv | Bin 1259 -> 0 bytes .../dependencies/Sui/prover.mv | Bin 60 -> 0 bytes .../dependencies/Sui/random.mv | Bin 4287 -> 0 bytes .../bytecode_modules/dependencies/Sui/sui.mv | Bin 856 -> 0 bytes .../dependencies/Sui/table.mv | Bin 770 -> 0 bytes .../dependencies/Sui/table_vec.mv | Bin 1048 -> 0 bytes .../dependencies/Sui/token.mv | Bin 4516 -> 0 bytes .../dependencies/Sui/transfer.mv | Bin 706 -> 0 bytes .../dependencies/Sui/transfer_policy.mv | Bin 2529 -> 0 bytes .../dependencies/Sui/tx_context.mv | Bin 730 -> 0 bytes .../dependencies/Sui/types.mv | Bin 104 -> 0 bytes .../bytecode_modules/dependencies/Sui/url.mv | Bin 298 -> 0 bytes .../bytecode_modules/dependencies/Sui/vdf.mv | Bin 226 -> 0 bytes .../dependencies/Sui/vec_map.mv | Bin 1841 -> 0 bytes .../dependencies/Sui/vec_set.mv | Bin 909 -> 0 bytes .../dependencies/Sui/versioned.mv | Bin 766 -> 0 bytes .../dependencies/Sui/zklogin_verified_id.mv | Bin 584 -> 0 bytes .../Sui/zklogin_verified_issuer.mv | Bin 602 -> 0 bytes .../build/gateway/bytecode_modules/evm.mv | Bin 515 -> 0 bytes .../build/gateway/bytecode_modules/gateway.mv | Bin 3004 -> 0 bytes .../build/gateway/sources/evm.move | 46 -- .../build/gateway/sources/gateway.move | 417 ------------------ .../package.json | 10 - e2e/runner/sui_gateway_upgrade.go | 5 + 84 files changed, 21 insertions(+), 595 deletions(-) delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/ascii.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bit_vector.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bool.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/debug.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/fixed_point32.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/hash.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/macros.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/option.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/type_name.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u128.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u256.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u32.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u64.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq32_32.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/vector.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bag.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/balance.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bcs.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/bls12381.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/coin.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/config.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/display.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_field.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_r1.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ed25519.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/event.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hmac.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk_extension.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/linked_table.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table_vec.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/tx_context.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/url.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_map.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_id.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move delete mode 100644 e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index 2fa6f10119..b62d2b7c04 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -517,20 +517,20 @@ func localE2ETest(cmd *cobra.Command, _ []string) { if testSui { suiTests := []string{ e2etests.TestSuiDepositName, - e2etests.TestSuiDepositAndCallRevertName, - e2etests.TestSuiDepositAndCallName, - e2etests.TestSuiTokenDepositName, - e2etests.TestSuiTokenDepositAndCallName, - e2etests.TestSuiTokenDepositAndCallRevertName, - e2etests.TestSuiWithdrawName, - e2etests.TestSuiWithdrawAndCallName, - e2etests.TestSuiWithdrawRevertWithCallName, - e2etests.TestSuiWithdrawAndCallRevertWithCallName, - e2etests.TestSuiTokenWithdrawName, - e2etests.TestSuiTokenWithdrawAndCallName, - e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, - e2etests.TestSuiDepositRestrictedName, - e2etests.TestSuiWithdrawRestrictedName, + // e2etests.TestSuiDepositAndCallRevertName, + // e2etests.TestSuiDepositAndCallName, + // e2etests.TestSuiTokenDepositName, + // e2etests.TestSuiTokenDepositAndCallName, + // e2etests.TestSuiTokenDepositAndCallRevertName, + // e2etests.TestSuiWithdrawName, + // e2etests.TestSuiWithdrawAndCallName, + // e2etests.TestSuiWithdrawRevertWithCallName, + // e2etests.TestSuiWithdrawAndCallRevertWithCallName, + // e2etests.TestSuiTokenWithdrawName, + // e2etests.TestSuiTokenWithdrawAndCallName, + // e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, + // e2etests.TestSuiDepositRestrictedName, + // e2etests.TestSuiWithdrawRestrictedName, } eg.Go(suiTestRoutine(conf, deployerRunner, verbose, suiTests...)) } diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore b/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore index 9e738f4a8c..4862a3d148 100644 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/.gitignore @@ -1,8 +1,8 @@ .idea .vscode +build/ source/dependencies -build/locks -build/gateway/debug_info +Move.lock *.key .DS_Store diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock b/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock deleted file mode 100644 index 6f574549b8..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/Move.lock +++ /dev/null @@ -1,34 +0,0 @@ -# @generated by Move, please check-in and do not edit manually. - -[move] -version = 3 -manifest_digest = "0266218E4DE09052BDA9E3B2109A20DE896078087CD0A32CB0EEEE34BE635FFE" -deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" -dependencies = [ - { id = "Sui", name = "Sui" }, -] - -[[move.package]] -id = "MoveStdlib" -source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } - -[[move.package]] -id = "Sui" -source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } - -dependencies = [ - { id = "MoveStdlib", name = "MoveStdlib" }, -] - -[move.toolchain-version] -compiler-version = "1.47.0" -edition = "2024.beta" -flavor = "sui" - -[env] - -[env.testnet] -chain-id = "4c78adac" -original-published-id = "0x6b2fe12c605d64e14ca69f9aba51550593ba92ff43376d0a6cc26a5ca226f9bd" -latest-published-id = "0x6b2fe12c605d64e14ca69f9aba51550593ba92ff43376d0a6cc26a5ca226f9bd" -published-version = "1" diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml deleted file mode 100644 index db7bb8367c..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/BuildInfo.yaml +++ /dev/null @@ -1,72 +0,0 @@ ---- -compiled_package_info: - package_name: gateway - address_alias_instantiation: - gateway: "0000000000000000000000000000000000000000000000000000000000000000" - std: "0000000000000000000000000000000000000000000000000000000000000001" - sui: "0000000000000000000000000000000000000000000000000000000000000002" - source_digest: EAC151C24C640EFC455F2830BC1A86331726D5FBC573DB7EF9D414EC1CD7458C - build_flags: - dev_mode: false - test_mode: false - generate_docs: false - save_disassembly: false - install_dir: ~ - force_recompilation: false - lock_file: "./Move.lock" - fetch_deps_only: false - skip_fetch_latest_git_deps: false - default_flavor: sui - default_edition: ~ - deps_as_root: false - silence_warnings: false - warnings_are_errors: false - json_errors: false - additional_named_addresses: {} - lint_flag: - no_lint: false - lint: false - implicit_dependencies: - Bridge: - Internal: - kind: - Git: - git_url: "https://github.com/MystenLabs/sui.git" - git_rev: fbb68879cbd1 - subdir: crates/sui-framework/packages/bridge - subst: ~ - digest: ~ - dep_override: true - MoveStdlib: - Internal: - kind: - Git: - git_url: "https://github.com/MystenLabs/sui.git" - git_rev: fbb68879cbd1 - subdir: crates/sui-framework/packages/move-stdlib - subst: ~ - digest: ~ - dep_override: true - Sui: - Internal: - kind: - Git: - git_url: "https://github.com/MystenLabs/sui.git" - git_rev: fbb68879cbd1 - subdir: crates/sui-framework/packages/sui-framework - subst: ~ - digest: ~ - dep_override: true - SuiSystem: - Internal: - kind: - Git: - git_url: "https://github.com/MystenLabs/sui.git" - git_rev: fbb68879cbd1 - subdir: crates/sui-framework/packages/sui-system - subst: ~ - digest: ~ - dep_override: true -dependencies: - - MoveStdlib - - Sui diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/address.mv deleted file mode 100644 index 678d49de9c1b9770c8be87fc61b5667c3ea4ed43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmZ1|^O~EDfq{XIk%5VsiItU|nVpNDLsEgqQUEB*2!srb%b$`GAr#D38nT#;G?0?JZN6z&x z{1e+h#IGXxP9K<`^|t#>`|!K|A<6#A6d4-O0}>XImY6L=NeOaSNTPRzB9a>WZrg-t zE5$-zJ0j&V%>%?<20yKHq75mqN!*}^ZK;T&6Jy`eaM_O{+d!;`2Vo=*MVE=Y9Rs0ExALxv_~vBVRn$jzLf?V3#5n$#=x?jkc2MrV_ix% zP6%kx*&q(bT*;KITx}$!gp-lHQiOFW;nz|~>4c2a6np?14%iQ?KtjZ7J;pkrW3&`3 z)JK<-rTJ{pOsl#1yjf1?FSaMM+4vmh$$3*Q>+u4{W^y(w&1A7C=NHMO9-mz|WvwUm z`E;tHu3LkOQAHHvrW((x*X8njQkS=uE5x^!a8cIHvbrAE)yp!O&M(S0LI%K3}tQq8M*X{z>A$)Z}cYw6;u zzHBuW0}V33Y18`ZY^8hjP3C+AEThLLGj60?p8xH5TO+? z3brCzlhjd>DW#32N1nP^fK>%gg$SJUh?Lc7T;mao7~lIKr(m5up}=U{)fcqqV4Qa5 zNF6vGl(Sx)QoqO!)SkDT2BF{c8cn+T20`l-_9O@|)MEhCNCc^$jAW1=jReO&^63zE zHUETCfYMGmeWVVZ3ep)bBUFB%_PuGLhF+~fDeYiyp@hQ5iS@KWId{1KjL?X%=xBK! zk00X_h2y&uT=+OKam{n#M@oQ78a#3A=xJewpvHS#C4S^Z;e*X1DRP|@`IeOTo#xCw zComItQ;tXa9v_?7%G-}`7($`qJF@*Dz{F5FCr~Ie1VM<%{G9Y!x8&LC%?m_KDDAgt5;sIskS>Q=*)gGbnH!6!Ps-WZeo1w^|o6OPi!9$h8 z^z|^X_Gw_xV&lfILn9+PnCzmcg$pUNv+!{ae6BZ)K@}5cTymryI)j2buTMcwW^p>z zFM8+<=><|ZYo#IhVAb5Fc@6)@A%2)))1rm;p8GEqnnIoM>IJBbE zTSN89U4U9O>Qnt7Rs$YtfPy%N9`DB??!|Gu9LKl@qkCPui#E}R>huOcf{-;Tq`pJ$ rp=tI9sLTYF!SK~xWsn~Vwgrg3r+C{$|E=@M%K3}?&Vx1Q_7V9T;s>+C diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/bcs.mv deleted file mode 100644 index 3c0aa2c6c57104ed33b9b34f5edb53cf3835682b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92 zcmZ1|^O~EDfq{XIk%5VsiH((mot>YTLq>teh6O0f$iN6hY@7^?TujVK$;BKc`SD4W QC8@RT<^b-};XZr3& zKZSt+a)1obPI3Tc+KRL}764961_N|h0ObWZpv-new1d>@IdYE9xpJ?I2jM85o|SL9 z*iO4JKh~7JABt7CXuJM6d~6pXX7kX`;>l!w+Rwrwrjo69=b=9e?IIqY#jc;Vhtc)n zgR@IroOILJ&cigyd2a=i^{+rzK$^|M6=uX`HY8R9n`ww-5t>)YfZJ+LT*Ms~$#dLQ z$X&ygT(kW0vZAME&N3=gQfPQ$+S0aoPeWn z3l0HxXp4{#UzYviy!Y(?{Id9A0sx2bpr>JY8vVX3%l`-#RxTQ@RZDG zN(?qpIb&I>7(Vr?R$0r0=EO;N;YKH#0mk&d^m80E>9Biiqr5Z+zMvMl+0zMoK0q)V4Fm{bf9S{}i3Bu==Qi=DYsNYc`zWoW2r==gab z9)XS*fL-}6976_;wZEU%tKHSdhd;alfB}LgZIrv#Z?Q<;;Vq^g=sVhS0Hnz03qWQg5}GT`bP%adL`G$pszj(u2^C}(Shg84rOYuM zTahPLBBY*>z@S(X6yy|h=DOf$=m$beV#|caG$KX7cp`QIX7Mw`B; zoAZlsld>QIg-a|gis@p4*=pXNEt=4^I=WU@vx{6v-7RYgYeHAQX^s_d!#i|K?)3i_ zDhr?^LRp@u9!t2xRRL}f>*@(@B0T1nZ;+fz9 zb5JR*6U*gKaZjK!$#Fd;l35#0#F{IoD%9R9^q5mJ@`zq-VRQ0CGREcjK79EXcpA}s zI~bK74j?B-`yAdTIZtg0d!9T#C(712?sJk!l5LVafFmNAcPJeESnm^y0389%;x}aEvwF2_v`XxPK5-il1M}A-7*f;5R4id5{1A diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/string.mv deleted file mode 100644 index 3c62e43ecc6ccd92292a1f3a8f6c34d31767b228..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1064 zcmaJ=OLEjO5N)+SmMzbW70)M0K|xU!vY}Y8nr%+Nf&;iF6DM(z*i*JcF-z90fhBMg z4#A2mu;B|e=7*Xl zKb1*;sn2rsCt{kCrUN=A5s|>p6bbk^B4EUTgc6!yVt4a@Ya@jVw#h|cNeNnzInoCpF zUD@_|Rrh6EuWpLJzL=k)sI;HlyiMGD?eL?a&>byyXPT`Ktu% zR3#!&XZeX5If#CoO6{EzaVniuQ+?>r8{#yfmp)1(Orghy0kTUCG)}k(q8=H?-U79^ z&N!MedXW|{LQ)8WAgNB+=@a!BG5JItCqqQFz|2GBCkU(W0SP?Q&yfrga0+4APjGLc l%VPM?aGH#K#v`=S828S%5XX0BKfSy5-Q|)%flv&H4^g0m5JhxE&{6;;l6A>hho#FovVDp20K7$n zl!k_eh5{lA8XkgI;3b&7B$g#mBv#rF|8~~@nc3OX8^4`mj9Fj`mEp;z+P%Illl4vZPL8)gm%qk0w`0AA;bn4Af+DZgKqCT zIM!zaR2)b$L%GK5@MyNk!J>vF>^A;>4$7+TqWP3UwUXUGaq+ zzx-l5W?4fjJ_kloFIr%jicf)Ihmq4C1EW%I?L;b01Eb1r83la;Zm6i9Tc%R)1eXV~_Ls!A~0kK!Omf*yz?NWv$?P9R0wr7=O}_!Y?{; z-}Sc;+7N?>4nl+g3L`cg2m!Ak6r;tEm_+V4{y_^gKnet~1_3}5_^<{%9oH*@zLG_ue&q)3trub$loFNQ(GUXaOtZ#cPPs$Pt=|v@mH(sS=15TmqPYY&r4PCgEv0%_r~do4mZvXW3{{lr+xI&)ehtDj#Q~v&ncg zE#_?Jm-^!DgTBZoG$|%oSXA-)vbc_>*;O{3Wi%@;*u0;X;jGG(Hs$#+yvp8|#Z(^YKL!`1@Q|wl;43BzgPYoTsE}_ZsRgGk zIx^bO9$BlM3cMw!tl}JXVz)-ft4`X>IlR@DdYqiV}SmB=lQ z>{QNxgO*0O$|a3v_Boeg-FgL*Qu=s6yMbj#ZT4ZCwhW8d-~is(ayket8D6uzKK2%C zC9P|ph{Wehhw`GX!{G{250SH8v6TOlJM=hc7}jI3dqCTwjJ+O6vFfRk&(F#GQ$`JLY6A8s83L2us-qz~w5a$afweon79hM@@GpkC;`y%tT7USP zr3m3^!M_{^6>pedzt2m@-O3U^T=2)ksNya2-935WM*pQ5Oa#paN9;t%6|NFH^w6up g;q3vxX9i7eYqNXwjC*orUmC%AHH@v2gZK%-FL4@yumAu6 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u16.mv deleted file mode 100644 index 4c3b8e186d87dce3586a976d7e7b514f93ab32fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmaJ<&2AGh5S|%(y}SNNXe$y@QHi!`4@gLjDxqAs^$-LS2P95NQ6O8ihwi4EO$u+o zD{$7r?Sh(H zYrW+l0Ylgk3ujC!grJboolfXT%myrA&f`!STO=%susNAGi?*yQ^R{iu>XZ9Wwm0Rn zm{xVG=jG+)-n?9w^I|%y=F_HL!LAnSYW7)Om6fjQsxbAIuNL)9+7#=eSr&R(U%^~A ztyykW^R}M;@tQBw*>buXtJUbaUbUBFvo1cibrakD&xdk_&rmZFMxq@}Hk$)s1g7iA zE5}}2W%W=yr@SP=X)jK|x{o-%hlmGn_WsofPC4C&%#PDe!GTh|8`J+AH<%C|>TbmD z1N(66OqhCGe7xH91b9Jh3h7wjh)?x#;^4?&1oFOx^dmr!*!LAkS$t?W~*e=f_McUfGdx{ zjVn*XfrltFyJ{#akzlRHV|#vod%WYXkA9gD01|{)#9D5jtE?A%dLRA7Zy0}(Pr~mq zu|MSJ2s#jhg)Tyb00JX21VTU~2-!$BicP{R+aLivD1a>p0NOzNw16;2LKr121T>zk z*crqi^^neBopZMB+P335w(GjK@A}@M7oI+W2Cy=Yy%rnEMq!K~z4wx%ILOy=319*| z;XFF-TOM27OOKL!g^NlsDT_(%nR5Pd zanyCgsp zLo0*OC{1HZXN3KFEci88zCNMF_-^gF01i}=fgMuH}){5UCz`UsWm#M6H zdJVAshre5^z`UyYS7}i3^bld^AKQA`8wJmZzq=>eZ{K>hhO+*FGkqj474Wnf0lC?V|Eo@|8bx`c3Y~-z5vz z^2ySWQp#zADPbbv1O|l^;Y6_-qsFSqG!yWnH8Mm4vP1<%#7P{O*ypgaK8(n?b(A{q zy&L#J?zxZxudpZXP0lHkDT=}%Y>g?5XsTFcGvbUikQbbrlpPWd(p*OI%ZsjR>iAXH zR`omors}S$MLDaR&d#f|vyFLmSQpzbze{}w{;CfWFxBlpJJ5om_q zdIJYcdVR_0Z`{^YHSgMiqPKy*(>qfDX|u1<4M-1BBhY91gvuQAk=>6x9N8L!VB4X= zU4RhS4kn7dbvUE-m`AI#=pJPcwY@H-&Vd5=t{%1aF{uAU_UwbGaNu#gd1QB$5#9)- zGR7k-y!UR!uehG?r5+V2o`eptHHn}UBLvkBQd(=JN&IR~i2-AfjYMH0?^N-O&@#cY zU>k#ZbraZyVv>(f%gMN|W^88{>iqPRIxk9H zR%LFgHeOv+S7DuB=Jhn!)9Ref$GS1oHf!8e<2kZT{ds&k9nVH5OL%k`-|S{;c5|-d7h{W%x1x>%uN-=9mDRi2Iprxxoc831WA8I| z?lI&8M*Y8YBu+U!;51#QonpY5c>H9IlsmAeZ4J}7!9}>jkxE?;)A^wi|`R0cno4k$0R?4lfIKBbG<0E ztK$rqkvKZa(4#}*iwm74Z$T6u&3Vr=)$;g9gzhcxx@8Ja&v`GhpygTS^>^jqR^4g7 r4WXMba~L8ky7dh8Rzl`rp^qJQ0XNomPY%8GUG@Rv2yqWdxL1g diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/u8.mv deleted file mode 100644 index a0152aba249a0f1c79ce0812f0438ad572fa0c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 674 zcmaJ;&2G~`5T2PGukD>RsH#Y4M5Q+UIaET*DwkXk7Y>y;@&HyL4)UQ%ah#Ng;3asM zJ_SemHwOYG zR0uf$DjnEjW`Qg?3*JJZ9|R!4m=jQ5=urtsx=_!Y{<*5Cas>q43WRwm!GGwxcKumC zw*7s(ZR+)==ViNE9WL8_yKL&4^|J0ZJB_~t1*&92y5ohleVI$0?8$95kFF@w3UDpLJc5+KoxM|Qf-?}yCR9x&8DSX zc@cOFZoCN+960b0W$YxVt*Qzi#^Y~4f1V$Ezux$xLjX_=5K-{(MX+6$g^hkO6Mn`Y zsD6qd{w=cUyR{A zImZ1I_X|mc9b)^rH|k_v~PP^ zKPhak@ZR0+NepHDe7@-LIzfmg|Q9p%5}RjKv* zD9t-vd#rGEW$GK(3JTFAIpy6;i)_!>L7FE;X8Q`OGp()cC>zq^$;o>viNacSikRIK zUnXRakr_Z%=I(mQbq%r5Eav_KjeD{rR7l_80i1rnt;D8OjaX_>tJJ+;-dhfP{W4Q z4O+TaP@1nm73Mc9%-L%(D!fFg8cGP^xmQA`Yfy_75}UKbTleKn?PzCdK* zj+LIQSxpi`&*uyh5#nky;Yhvq5+$uma~dXrT_^C$*gi~R!-zJjo2~)luqdH_wObN# zSfbbZ(UYkMx}kA%(e>$)q!)cAC!WhUu;e0)d=_4L1?k6g4ymKQfUIJC0a?bfLxk6% N%8}1CPywi(e*poY>vjMD diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/MoveStdlib/uq64_64.mv deleted file mode 100644 index 96963b9193dcabd6c899e788335234e2b6857ca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1337 zcmb7E%T5$Q6uot;x~r$EhnWE)hGUV|E0FVFz7yw5yjFTC0CUyp$sWAkohyWmRMsd>D&Vf)5k%zBRxlPaA!@Z6uo@RNAwR4yEo>|;@TAq^t!yu9=eE0%^~$Q>><(<1rM>bP z&XaxIPI0@GMA#s}TbUNz9itx2AQLJ=$0~rN6iKT{r1;6ux+Vik*?j z3R7BZ3P-tbl3vRYVh3fBwNhi-rrb$QG3fVgUQ)n3>20S9&&$6~atB@}-*J>H%d5)D z+r2bzckI5xx!KdbaigFVO_EdH-L%ZMjP0j+Qf9WNuwGkP&i1l`oM#6gsU-><^;5)b z9{4sP`-%~BIV5T5S&+1;MmKoEmfrqmGBn`e$W125a(UIHCso-@XXP?KEtXAP-A;f?}zGjQ7s+z0%zXdww-n1HkQVuQzatV;Tgv#=Eyc6EiKS(~(3NAnnULBGL%viMb zmehv>3YxS`N?ar3xyjhQ1A6UPH?Exkgal)=OFS;NYjB0g0T{ocb~gl*cr!Uy*i*S*bxS1ZjU-f zKw>!~BI&VtX?gYtKM}#m33el6df5Jh7%BE`YOgUSv9cKF>Nn+JGwpPG8_hZ0i_27}Q#DAX!gWa_;)1H4J+-~4@Lx2uZ e^5E2v%-Fmlly*a~x%PJdapiLE^~xWQ1FC;RPhznE diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/address.mv deleted file mode 100644 index 61ffd7ebaa9512a9726c62d885957b9b0587c6db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 763 zcmah{&2AGh5S~BVyS9^bE7TqeQV}FvKqVDFrQ*;c1P{OgAr8?t**1~dM9QXBd*nU1 zlxN_HxbhG%-Ysw|BaQvde4}sV@m$~i87u(g2%db#>+j_gna>0F1+OvtMhEr>?Z>bD zodA)Lv6D(2usRfg0GT>C(xV4@c9nuP5CCg5=dG#-mjOhFfE{9>UQP&XSU`jb0-(Vj zdcq7aL$r#t8>7uZJQ0&Y?M?Q>YB`&qxN$$|*{E`rO+rjp#N*&bDv(-uAEm80$n^(`f;ufvKm#v4)Pjum>awng9hCox*(I%yX zfrhdZWb3UBZ2!D_BeLnLe87T8w+F&&55uPe$@O~Gk7z<3m6i3N>CI@&z7mH6+0yG> zKa#nZM+zhlm4CSz#q23j4&;em$9+}b$s-4rUGq$zphX|GC`dHHP})+bT}ih$0UgwD D{oix} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/authenticator_state.mv deleted file mode 100644 index dfbbec25ee623c998d068e7a21fc4bc15e07473e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3000 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 jw2a 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 BrdI#} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/borrow.mv deleted file mode 100644 index 06b92daf4eb1248ce9a13baf6061bcfbfc4f956b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmaJ2=C}0e1Flqt-B!>WmPALM2fGSvG#aqTI3JOManINDK9cFu0 z@jx;J3UP#WzPumZ?dbHhZ&sR&Uz0Yh~7Z+#+q;roMfxr-v$mQ|=O4I9OVcIG+g&vu?zEq# z>$B7s^539k{qI8de|6T<+$^GCC;ju0Xy1-JgMg}50`6x4N_eboQz9>NcnBp%DyXEW z1r6{BCjk%iN7ak_fyNj)ngUA-d}wl8XjdE_<-O4yn%nkn$G}n0Q~^uY0RYIfVaE^= MmC@l)rke)%0|(JgJOBUy diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/clock.mv deleted file mode 100644 index 5491e4779ff5121f73ed2861933fd01cfbfc9620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmaKoJx;?w5QX2&{&?ec6oNv5gdkKjbO?z)G*lEoZ5d~QKx{|$MvAxzWe&ti5E4gV z_(=&<%sjpMc2+a%y*FsnLNxVRO2lTs^y28ryd|PG6+4=F9#EGZYedWPk&) zh9U-15MWpVS}TxJ7Tj}+oN{cS6S4v;$?`mLP$I~XBNDp@GnqH#Q}22;Y3dkOQQcge zoAS%sEt|Rvb+_#DvZ<*o-fhW?ye4CNvQ2_OBqYN_f-Dl0t@(kR zQ~82?MsD)~xuhz$+;d6Q{6SKAuK`M8jqNg3dj0l(TLX>1&i_Z5gpd*?Gi>HNp8cJR zAH^l(C-HA#{nP%hlK-gRHUB)dwh5FO9>;7f>U$XSm$!ht3C#z(NPS7p-g8qg~ zk_GaZd`o^!eoI0^T}min8rl+ZSL23;oFhjdP92LdX;DHrV4`dhg9zXo3ZZFAVp$fk zDuUQ0MpV@z3GIhQ6T0d{JLUv!Z_Q=g)Y%uUY#ygNGwocqU6x;c-2>c?@HvnNne4d66^&nA`Wo<; z2Ie?hzXdbGSruKPFq zhA;iVw|(Ke{!M?)f8k&AtNxSqCv(plSNwH<)t~gAyZ+{rN7PiD+JthNuh3nf%zUwO zo;6~UT&8fbl%_0&6w}a>Rhn}($#WS8Hp@{hBtW342B3pD>QG0c6i^F1I{HsZDm`?d zBT*D|<+u>_c`g;`6;*^KOUeWUg%qY9chEXTFqkrjIB?awqJ^au4fJQql3{`=Wr%@M zA;d_4gCbZ&;WIbU&a5Ito|m;CEhs3)MH!VgbdTz^il{NpgQzVXHabLgSt$yKv0|O` zx^iBW$^;#UaUHjIp<|%=Ub0LT(_S3Rjynva&wGjfu+iEd?1oa@6q42`Bq$2BSb>98 z0X=3D1Db+4KoNDkNB72biv0{G9fv`s9P576j?!iHbF4vy1iH6^YohWRS6~P4i_hOS)=0!LYBLz5cM#O|$qzCSULO;uldT=5Mw(`I~-wB5Jq0@59}8cROl_y=XXyjcCwJ z5({VySru#88D?U8*iS_h!ml9+J4F&DO}C+5r2{OCTCIsgstL7-l5|i# zWcA}tcP~D|*jquPGlv?$7}*tRWMSOvHs3CMTqlKU=L)CB6k5q3+HS{V6(4sIr$19z z8FP^g#;n8Kpfw(r|3xN;QBIEO=k-vnc+l)8dgfffvwn9!{2}glORZ!tX~kiZX5BC? z?eydLhq!2fyVLJ>!eVON-8c&mI+zoOE|E^4s^PHTmPn*9nGPa@{myo`T}SkNlD!SP z{bV;uVM3GEK#ojU(yAos*ig7SqGEF=C-$>=pfm~zzyXn{p7KmIx0CF z<7r@j?1-WIM-J8!u)pXyo%@X9;qEqQymOC$Mc*D6&oh!r(4P;Pp~EH}ERx0LcRZH$Eyz$x#$+7}$_C zc;_P@@7AaXG;$1v*X*kehvIjM{+$(uq2TTVcLa+rI@BST0`r`hFlGuSTfFOzlwIS% z&gELup>wWqI5-5y`Zs+>TrC+6afHJHYtvQyKs4oY<8Z4m_-dbePw zr;0T=!;hM(%=@v1E$|@x8Zsf9oWbhY5c^0&2$X+ulkW5_NX!kTUA*bZ*SNmjNWQX4csm z*hL>EtH#cba9(5QM!2Z4^CR4-vBeQ?*4Pr_`SHXr!iRHXBVxjcNY}>cY8WnDzhOWm z42Ts>=>f5or6kiIk)vuCqXBKW&G5VOpbdwDy9_@vwo4S5^18$FK2>pRp6$aTFwkk`7`K2@4T~gapaDHSx6Lf$_98(@E?F z3nadPKVZ)nu;K&w03=u=I-$P zM=HK%d-6N>8`Iy&-+A;`^iX{tubZFZZToku+*jsjk^GWI>91+j`ZHxDp*P4J*(3+# z4j~aGln6yNA<|3AH6?`6h-o4ShvZry#0Xg>6rnxJAP=~gv5=f-O?FkI=XDhPg}BjH znc(l}CcbSQL;B4m6_F5{n$4Ri?>2TJ7dJA&={u@l$1JXgkl=A5auw%Ys*+< zDrCi!QhsSFKPokkmtZM5ZDY zgE0%Rgjxoh#WZAb?Sn`P8gwYt9*$5I6u`U}6LVGMf29NPtgHwPdKy##4B!a(is%Qn zl;9<)WawE~fzCXQz$Flat=_N3$HQmxgJC%uut$gLle2nQjrC_`T@T04>`Wi_>wf(B z9LaTgUh^l94taktXyYx8t4T4&Vo{z|Mmxb2I&NSf3R2#aX#=ec@U~Y^*2!qgosfN2Bbd zKW(-Z{qdmqqP$?kK{6Z^byc8~NjaVB;j|c6pO;5>p z<)MkJ*%I%_+_tECh35%*^}}u&=dpNCKExu%s1z?f#Y%?AJ@-Thq1&oFmG))y#vaBj9jD5IVX$& zkd<4aEtjmIn(kr+aH1zS8sCb0JkJ>ZtO%RGNub0RSd6s2Bqdqbal_G3 d8-zFx1#RT>IA?zo@h^o-MKao99o``=@(<1K4?O?? diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/deny_list.mv deleted file mode 100644 index a2ab5de20e5e5e17a53867aeb1a5df41ef83bbcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4815 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 Y1jqoAL2?MiZv@XRj`#@wXDJQnAJDD6EdT%j diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/dynamic_object_field.mv deleted file mode 100644 index ca249f660ef71663ee14f81f7926d5b5b42f6ebb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1381 zcmbVLy>1gh5T2R+z1{V{9seXio*?znQKU&lg(y!>d{GYBzR11+sd)$_D(K-s;1Q@0 zl)MD9J||J4C;}{dW_G^so0%QoecJo&H2`=7OSUiezM%Yy6ZH!}qIoCY3;RJobKkZ0 zKQx7(`kQEdb_4O1qxQl>K99wR{bV;gYYZnG0-72f-qJjkZ?yG1Jp?zGe#ys zhSJU(Jd?lu{S(|^^$yqUDBHQG`uI5 zEiNjz&2yN{^5tbVFV2#mEUPZhbGOlC z#qzXl-h{E$=xn;aHB+_~Q88;3v+Q(LE;7E-DqpWdv8?jdaypNR*7ad~zdPqxe0-g| zJJ5}Kl`qQIx#X*{DVMq4ZmryGSJ!Z_cDDwV>vEAdFL=hPyqb_-rH4NB5XcxmZa7W= z97m9hJp}DBC{Mw7^%R0^niPU?+DR``^!mWdl&~}LCKZG%>Nyq(k4z>nJf)OMA_n?* z0hRJA%D}LHqj2KDu_P$2s8SQS3zx9yB}t|>&9*RbHX+5SaU4=^(!xn6(qvz@yu>7s z8u~cpRW-*05oy*;26Y(++>H5wANkbt;~mEh0=?*r(?CZ2#||uu?%hGcz`Z+g4E*H| MJX8Pm!u((U0bYE^yZ`_I diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecdsa_k1.mv deleted file mode 100644 index 225867c0f30d3de2547553b800d9fcf3a22521db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZ1|^O~EDfq{XYk%5VsiJw(ahF#ZzBUgc~mr;dhBO?z3P#lOE7?^+rGcyYVGaDBZ z5HT@wF);#Z76=zC!YG)Mnw+0oP?TC+9A8kHl$~11k(!)RoEV>NC|sPHTwr8smTefH znp^}_R+d^MfDi-nGSe!7*5Ct7%p5RjW)6^>K!BNp3Bmxmkcp9zff49lAZ7w$1^{ZH B9GUuJag0EBFflL!F#`a9CltB> diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/ecvrf.mv deleted file mode 100644 index d3687f9bb0549329c9880534ffd4dcc3c590bb3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmZ1|^O~EDfq{XYk%5VsiItU|pIuCtLsNmxQ;sK{1t`G?ge+`aOmM`=$eNm5R+PpA hCgaOei!#$HfeP^fCT0#ss5~=DqS;CrHmYP=r N6vPLZ7#Nut7yxdC266xZ diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/groth16.mv deleted file mode 100644 index fdadd5c91d2c6d1a412e560dc696f2f7b453b6b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcmaJ=&5qMB5S|(5$F9-0~xiAh;kT)DzbzY13}B-6TrWN_`Dp0P!|l zIq?vP15W^Br&|@Y!m+=MzZu(~?eUj~KePt`3W1115l!8vZA@YM@I0r&vOO>iS_E+BwsAS3}W6b`^0m*)&z_Vy)ngC0YqG{D_H14?idbstJZ zr3kr7u7W%Xo?uB^B1=3ct4FVkc-NwU1<|1`<=ZN8D&dNY|meK~Qna{Bz4Yst|f zUw1KOzDnwO7dl#{*VlIBDeJGAs=b`NpkgtqJ5|ZelEoA|lsHV3YIoAR%;OjYFSb0)gH0Py=%cLw-{sawCnQ&=k5_gx;`6J&r^`L_$6f G0){`@T%V=@ diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/group_ops.mv deleted file mode 100644 index 2a210113f4af4a684295fe5fafd2c91b825a61e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1597 zcmaJ>O>f&q5Z&2Na(79I5@lJjlQeaK910Y08$kA>+eNakin$jSJInFoEn_He$y?u` zpo^IjSg04IV`iSu%SE}YMR9edi}ku(UWvasG^)$*p?)Z%J( zqss5Di@ANVSuG|_GJd&PU9Tsrb!A=^)vHOp^0Q@KZkEM-0@m(sb4#+%f^DDuU+v<0 zKHAk{Q_m*Vw3rv02{!w>burt_mM{0L)%E4w%_7^8+!XWKRZ*7$1V{H7>)Cofn-=wK zwKTV!W>ey+t1_v|dQw!A^`?9=do6GS*dnS|?Ev&mIjvWlAk6oypy~H5645p-BFMT~ zqS1K>Mbs!C5ndg`+r<%13i8O=fQ|64Vtq(s3^0Tc=9oDevnQORP~?tF6?vgzhreRx zy>LQ$)pbOMo;u3U8RUk-$Tek-k6D%gl=s0Dpn4aitaDCW-v_$@O#mTXM_Go#@DK;z zTDnl-bJDDjq*fknI379)Da$XSC$g_bJJd*TU~*UFl~v*BiTvD>RbQ&y>%^pb%=evDBn8>!Ho?3Ayv=l=aU!w*fSv_huS7&V|pkGXPJG>Q(Vgxh z)pPzEwVjTOy>dEL*#Oh?jI#um!aA@nEQ9r6eOL|~zz)#m@iWUmxfptBr8c`!$0`YP z7Ee=l#=Y5hi+Sp;{!ZknCHa9GS!va9*V_>4`OvDM9IsP@84q*Io&IV#xHsP(?h)i3 HlquPNHf6Fa diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hash.mv deleted file mode 100644 index 464f50f8fc2ce4129533550574378137a9fda5c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmZ1|^O~EDfq{XIk%5VsiHntoon2UpLsx;vmxF;3C=SF-K!TBti;0noi7P25F+0^L g$;i};M1& diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/hex.mv deleted file mode 100644 index c6445478c749e32c43944eb6371f082d262c5776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1322 zcmaKsOO6~x6h$*nW>&eY(k&aAHkPpvw7?S!;{QQ_Yzv8Hp!fn4+d>wC8Db-dA$wo} z?1fE`)lI_$`6)gx;@!A6VsPWPcmF!>hGDoh4)Zj>JwIT1_`&}3C%3+Py8C_nb+`Vx z|AS#3mtopa!+07P$1R!Wt&ih@k@;|7nhvl(oDEwW=Bwp0jw9^St5@ws-PKlJ)^@y} zzRo|rZoBs4v^9O(e%$@g%IlZkpV;3JyrFg~jnl0g#I!x=I<~w0vili?KuCl_XoNvn zghO~lKtx1BWJEz!L_>6>KuV-SYNSD0q(gdSKt^OjW@JHDWJ7k8KuMHBX_P@(ltXz` zKt)tSWmG{`R6}*NKufejYqUXIv_pGzKu2^!XLLbVbVGNHz(|b3XpF&FjKg?Lz(h>K zWK6+SOv7}nz)GybYOKLptiyV2z(#DsW^BP$Y{Pb(z)76KX`I1XoWprsz(ribWn95k zT*Gy|z)QTsYrMf*yu*8Zz(;(-XMDj|e8YEwAV`8DXo4YFf+KiBAVfkUWI`cSLL+pd zAWEVlYN8=pq9b}@AVy*$W?~^$Vk35vAW4!UX_6sXk|TLiAVpFlWl|wkQX_S;AWO0$ zYqB9*vLkzPAV+c{XL2D|awB(&ph$|MXo{g&ilcZ+phQZdWJ;k_N~3hDph~KuYO0}H zs-t>pphjwmC+>o`bpe_fU@*Tp+~A#l(`4o0!ZCBI1iP U5{=`HOwE95@Bt diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/kiosk.mv deleted file mode 100644 index 64c0a2727c6686dbe122b8e7cec24fb9e5180fbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4293 zcmbVPNp~B^5$<)SXL_)Mn@DkyNKw>AEtEJEC2ApKn-*=!wiG*?VF(z;h(Le=KvBvu z@8#u`zu+XlBrks>hg@^WFUTRwS3Lu0jSmLi)KphhSAA7o)6?_knSWZ3F_!0SQcQj= zpZ{K}f6E>HSM?w1|Hb^#n7yvCXbu2XH!x!_Jzjqu?KS3hbtBvqF)9f=nYH!Jqp22 z21Gy1;)nhi7Zcn{9+0= zpPxYJpH0s&_H&wYXZj>#m#1eL`_c3qV;@Y-Gd8|(3LYkc)1Z^VBIu(figf+VGGn`E zm%)DI=*MU0P>X=$9W8|IKY^Rb_(Gd19X{Uy0p4^_kMV8Ze{NL>gwv1t?TRYgN^m8pIrU)#`^j?_f44z!wi>1Fyc1i zrXYR8Ji|Rx&N!Xj12j^qvPB-SfMs%%!zfdkoXj|=NpEt_sR)=Y!Az$fVCLcph{(zk zlNt_3nHw9TGNvpb4$zv0uDtNbF-PGY9`XRh9GDrdJl8zWCHJkRbRdKh<{mi+7@!yj zjqWfO(VE71rApjo4m=HeBSvLPLx#*UX7N3lSd3d4!AH1Y(U^4 zL-$)B9=Hua;TnOFE=}{0g>&V`+!{zF>H|=&VhS9^)wtm=rF1BWAt#8HMg(r>MyB4V zXxu1NiXb71(I@~%0RRnt{QLEGz0*j%``uozd#tv*t&Z5;QM-fWAR@Apv|If_(hO;^ z=hz&vkB)kcZ|nV}sUNhu{bxBxA0Bs--gf=aC&O0fmuj!uc;-Dk9JIO}JDdT%{Nl-O z{&BC~>F+1KN8NU-@v<-+exCgLDCrM^$1k?Kok8+qAfN2+$a=F`thd|U;~FGMrw@mH z|7nK(sly(ox7xwcV8}kNx66%ox1ZGNoo4O0HTbsKs~@WdlJuL&e*LID@R~_G86TuM3`m3ZdNQEjnXbp7oJn0Pl_n?;H4NIamV9S*VVW(ch`WLyrezHdlemg8@TMyOxS zbt{M@<>Ar5>m>)>=SeZW)mr-~9+37cy<~9IL&C2WCCp^#KChp2nn|zPPX@KO+czMg zD?)L^)fz|rLH8i)e_QV*wX|Ncf7DWg`m@9gvL~i6WNL@**$D?Pu*&Jfa@1=2xacV; zX7?I;ER8c13@aOvV9>?dVZAl*9wlb8>?b#ZF=z8_xy-}|FiO7@cmZ)o?EW;jh6 zIg;VcpK0}oqoWc1q``^B{iGQ>lqML-!Vzaj98NyzPv~iB~3geN7lUbxK zukc7kGOtT_tXfbdJ%(46&z7y{{4A&wdX^+|*~-!_t8w{=tAvCvUJ9AzrAei=wRlgY zGev3JvH}|uIP)={ADIL&A_!5H@&RL_;ukD|T8=85al#OgW_-$#+VlfVH$REGAF= z^0F6~Ip!g;7;T6QLmsLP5m&8r$&e@>qoY6DzBS6n^^2l@aI1tWmh=ShTF7WwTn_VU zRxf5kFU!M}wX3B>^NPr`s6R#9&Ihmh%oPbIO|}f+<7xpVo`}5A!_vrja!F0PHnXr0cwi%?mr_ln zkgSGxq=jah5=Cr?I5=W;^E{5qo{3LTtKmT_k*4@+t;b=+#|W6SR4|$rWipZ^6cr%E zQIJvlAmbTPeN%8!jJ+=K;#n~c!DJaB&|1`Ib1FjmCK9?xAW9S1sf3uIX(%2!rpnI= zd?LXt?O0w^)dev{66}N7o-^D~2p4^*{hz%?kBMp0B7ve1Gno(U64 zBUTl&L!MU!KEqNuYA)up>F+?0Vu4iCA;Tg&xXNfs)U`OC$co!sDMy4umbA0Xi&Hdd z@$Hn-{;#~fvy6{+mLTmN^06RJlaG}j;KM!cZimbEg|ZZjaQ4}}6%|QcJL*}h3u(_% zTZD2!jp->8geeeozw4AGfqA&+{V9rB_o@TE`hYJ6NVydQ-S(hGgO I^Vl`^Kj;2YS*5ini&$H7Nm_P&%>zJD zya1$l5FUcJpo%BpK#%Noik|{hrT+c8^-XJLemwovDFBEOQkFjEPv4;U1yAH}_zmjc z*-za3pdP57)wAfe9=Pu`i@(?3isTIyoq&Z5j^SN+51s%D0HzTTAqLLr6)^}cKuYS3 zN-+RKSq1|ZfP~7WnBQV$2`*^4v^-zt0ljAGidDnMsp$oW*IB zx^z08j7L+OX4yd|Eoj4)5kebH3+-)crVK}A7+DlTZJ6jSi^?gqNI8x{0_8$JXo)r` zja28590Q!97HF-#ro!+ALMa0G5Jpz;sin5apB0z(liSW$ZCO|G-g@CT@iliTzxecHUMv>;qPSESb<@;0(N^WF>(0!J zDqq&~D;tdUvY7j1;oGjMH@RP}yNzCyZE>;mZgIU@ZSq&8UoMixrYctDeCsJ+1%URq zW!ts6rEhLICwnV=Df+T#^I|^tZ5x$szAakBWR_Li70abx$g8lfK`--tu?X~%APCv{ zrYe@a@;9o!_{z^axAx7dY{QIN+4E0(xyP!;uj;S8Zo9fEF1_37KxxqJW|pt}p+((o zKHp94x?BwD4X~Vu*I~^2z#R`dRR8ucZtl|D(Anr8Zurg;w5k96h~XV-A7}iLVfV$9 z&Jzw1Q=l3=jxb``p^!46o#O;Lh8oTt>Fn5k1WsfF$ISuEfDRuO97W);FR+gGC7eg_ z;S5D84}#0iDLP{VIArYqpv@hc2lT@TqHS+S&4|yw{ZLMJ5q9nZfxvCXM|4GGDHEYM zj*xf=X+j;La7I&MGNh6S14k+CKF0>g6y@ywzvO}|#n8k;j)SdY;e?pVd!ZEj!OV2H zx&SBtP^$V#yoDNO0#rH3jsj)NZ15$mTMS{$qQGGk!7LI(-P^;Pww-t7Hp4FL2IQjtE9$8S;njeGh>@he7e ziXmJH66a7@rv7E+xQ9!qJz zswS^}`Eq<#d-Ziwdh^Y+t(r;l^6v9y()znre*5JYa$J_`Y<&LOoHesqbDMT-bamav z=M*-sCUaBz+PA(}`guER?nnM=+TOdRHgB%HDre2KSKd#?SJnCGqVjc_`MYY~&PTUZ zdpTmQB!a|2Jo%x$&dOg1kjxOP@1V)?#Y52tq&C<^&B2)luP zNH@!&16rc#{tWi{iHEO%0-l3F_DBn-AjDFn93-xvq;LW$7U*;er&tKpBMXv67T}`3 zE|fa3y3o#$&5%!|rif1D(3-+HsShbkTIm$KEZWE_E1qK!Q#zF!!U*4{g%dRtG%^C_ zDG(Bc1Z=rLq#6R={(s=)0-bWgQQfO8ZjoCJ`;vBSkESc7C)wtNpoe`y*5i~rr2*Di<&f4x zVf%QXKC-+3*n*wqV@n5ifS>_F+^IIGr9Edft?q(KV03tO{6Y0UJtnNi{WO49B d(DV)0kmFbf0TTFbl8S;aD(xKYAKfSi{{Vqux)A^X diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/math.mv deleted file mode 100644 index 31c19cf6f84ce2c2d8096a4c72f4331c50522d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmaKnI|{;35Jl&gm&B(!x`j*I>iH$WI+3=9Y$1~3GqaHt5G?M2(^L^kW6!Zye@$joGB zVn!w=6p*|uieX+}%6ywnTvtj+0>GB qlqTsc%LpPKJSIJ|OFqJr-S!a?@n7^wOt6P!K*4tm^|YTqCU^sY)*XZZ diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/nitro_attestation.mv deleted file mode 100644 index 7945765e07aba7b15944cea06ded0bc1a9472fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmaJ<&2H2%5T2jdah%<4v#P2dkhsE?GY3%NN~@~(C?pn&nmDVh1M~%W4aC#%44gP} z;L=CvIIGY@QAhFQv;FzA_09Zv_BYo6U=cLwEuXzs*RRrV_zTT%dZWMd3;UB_uI~8D z`cJYI+6oe20zi^4MF0W=kbAG5OQ>0X22kgOaVn5VHdvN~$?Cit>YK9`~eqET(}^P zNPGYv!Vka!iR!i;a>`h8bv@Ust>vnZ_kINu00syya|b;7fX*kB;xnG8pZJBl@5OWZ zUHnG>n+gU$)K@nA<2mEMo(~5ofWspI1;8BO$N=Vm0J}ii4sw8qkvMV$fGUzHa!d^D~uXS*7cG zmRvSVT{L-`G-VanP10z-NNaCVR#kZw=b7JWmw6@^Ri3@pVzFs-Ez(t)zLl9?=|%_b z5$Ef7D=*WZNSc%PJ|day@B}f-a(MeN^eRtg^WC zleI1~UCryuJih6w?;y`6=6k)V8@+DbT`I*U_nYfDZEt&E@+Wni7lp1y2K=wr+IpWJ zSR(y4cRlnQ-T9z6y3-CIwld^ahT6(-w=o>PjR78a`(CzkX;#q_$S@=y8aU|$Fo9G0 zdIKWHIz8MEIpYTK0H$WjNgV_b9x8QA)9fnwOp#%VOwa^NN1+9>1(rrHYjd;O%(Xe-!w^Pr2>$>U*}#AR diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_bag.mv deleted file mode 100644 index 3a84362d158a5dd8591f9bd42b9d50a7bafd9136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmaJv?bJaB<(OF5n+!-ZtlGu^p@a&F zk`F?Nnx0uFgrm8U1Po07k~BA(n9{ z`ZfV5Y#dAofQK?gO;H}$q>8{M-4AT)6-=Y72sFxzFgNN4L1B9WLu{VXf< ztSC_%i3Wr=5JQYWDkP|4Hr-`9M&t*P8z?YAG=xS_m}Zs;$RtK4@EbWXLeTkHd@+6N zX8!r)QeCWk(=Owe+ZXN9yR8?m&d$g=f#s1CBWPa_crslo4FZfU28z{`NPm~*R zD#BujD1rVUEL|5R5QfvtLe3kI&=@QfI8=Pt#VCOsPlyiGf``UP;!p<8m`HMI^1Z}Z zr1ZbUX(y2oMR!Fcg*$?sPLnq+l#)vvk_ox$@}t!!#5)9oEaBZxDP^z!S~89j4Nnv7 Nmt^nCs_>Z*{s5 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/object_table.mv deleted file mode 100644 index b5ac88cab54023112c9110910eddfd3a4f3db065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmaJ~`Bqhzk-Df6y+Rkm#kSUdlPz-53bkP0Fs@?(!!fgy4oa zBL0Ej;KYTWz|MviE*(XFdG^ekN&G(F|7`>Sn%PA{Tl#~})SjWRC#nPMsDNWQ8}BxrJwH8R)2b4)cC~7+^$yDArC0NiF|C`msNBMN zmsf7>SM9cR%L~69SKDT~tmkFhiI*>Gx2UAs)N8*ksjgJL-X)5KYhLM==gv-4%kg1z`}o7iq=-EiBnb>A5tkO~=l*1!`8h6}^p9`Q6W5*`^G78JbHeO5PH68{W> HMGJobx^83< diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/package.mv deleted file mode 100644 index 385d4b7273d5fd2b4c1b1f569fa10699eb4b1b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1809 zcmaJ?OLOBy5bo|7X~vQ)S+SgVHgQPSERV1(u$3cKyO+IC6q`L#D#e;jL~Pk*E7^n- z`~yzh`4tp5PVif{ICA1fk1T}~tEy>#-8235V;=rx_b=ZC03RWw@JKxQ73Ev>oWJo# zy``TV{g3+6{Y`)C{oHvR{L%SQcK_@qaD*N{fgwDGPvJAb0Kny;nMVO2DIlppup%4@ zjv#;#5D6k6mH`h~7ZL#mwHyft;C(ATcbVX+%S>Om9e@*$)lWP|k9A?BrlgrP1Laj$K09Wm+Ee;(6!m>+?ymyfh2zq7-w^5Jjse_Sj#jk^YqG?c{rX;r$yDe#jMV= zsyLst0o>e7Ol6|n%+pypxohIOd2wNumH&D%o2JuQemyZkjpy0;D!VZLg{e}`bzzoE z&*IgZfrW31>N4eQFN!joq(#1@B9DqZt^FIHF6-5-W#|`64sOz_m>TO|GHW=^u1s1? zr`J`+>H4bxX=xi;nm6w3{5vzQ*6W<_o7Qw^8P{f8Q)^L8;_j-iQQf+6S}n42`PwXc zZ7cJplK4METk>MHVJY`IYH>5CxevVkSEYv&Ej@)m5FXs@T%K% zygE9aijPiRs$Q89C{S9i}gckQU z*&srGGJYWZ-8pD1|Nlc`TdN~2_xV1Ntg-u4921f3YWGOH$CP*^h*lbK2K}`VPC-gX z`-logrx=ir@qS40CXcN(j?T+S`{3azPo2cWQ)aL>*M~m81n~|D%hX|C3^CsHp$Ey3 z?DMv_VF@jnR~uz)NqGS#!vLLu57-INM{+EouoL9A5J*`l*-8o7e$`kc)M>Fy$ZN5a zaC*%eH=&@#Dxq$RbwZ)VHd2Qo3rRWDTLG8i6;QN>vW}+Qc!S@}Mp3LJR#99!zk#;) z0lPeSq;$L&2riO4EDojTgj|}Uk%w%P$wN7CxNKB7s@DY4=fx3m15Qq*FMafBjcDC+ zjeP8jKm_E~b2OB`6Iowb`^FEH9?ErR+nU6v;bB&h*v{48x(|^U&;~2is}u0>SSrU~ arNGf3k^|xcz`M(jvfzIu62R}cfPVoSsweXR diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/pay.mv deleted file mode 100644 index ddf2bdc2e6eeca05072c239f70fc3bc232eb6936..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmaKr&2G~`5Xa|ZcfFonJ2av_6eN&9;?{Gnp(;0S+^vup$xxgqF;%$m99($-?wolD zUZO9-tnDO`-rtkJC|&hsYOFtjeQ&=2?9w#j2wIpK_n_U`j|%- zDFEi+JOXFE-c@v|@9)Zrc3a z{&L-R^}aJpbtkLlrdie1qFq&=>UvX*e$#gAsx==q#V1qU)XUR@=(D@+qTPL{w&;|&2 z5@(=0GJrn0LNg3>F(V?46;ING=ue6BGMdQ3VqTatD*`17zb+qZ2?usc?9W+bt7N4h zapLMq0tQZ8ZDlkxc{a8((HV-j>`$*FU4 ze&phP?x~dmuSB05=s5NPxSt#Efiq>vw1m0b@m?BdeFm=zNSH#O=gbAt&iYUM1!hHB ALjV8( diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/poseidon.mv deleted file mode 100644 index 976dba4d3c28ad91ae1e261109b0fe4735a5a0ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 404 zcmaKo!Ak-`6vn?dZ+3Tf95o>d!h@(_(WOiy=#*A;s-R1kSTgq@$SST8LKpvpi0<`A z6!qtL3%Ype-mGHKrSI_g=6my)-U=PHKK%T>Pn#k2z%G#<0X(1J?VJ6oHNZDHo+-P2K>n7$Xyz~2E*bQ#0 z^tVHjKN|0Gx~+6m@d*@AV`$L~q= zq5m;D`P^B*x*U(+j?UjVp0_81)Am+^Z;1g}OFm{Mk2Ma+NFxku`5Tv|ah6hcHL7Tv tm*l2~<_0Z$q9pT9A!(tK7V~ruhn!+}L9$|aHk=VT$_Ybh%CUV}06$nsHShoc diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/priority_queue.mv deleted file mode 100644 index b035d69b60f25ce3a93a70c4925e748efbb07651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1259 zcmaJ=&2AGx3?ADvv%531+ijs~g(@USOKu z3kYt7lR_4xP7|%tIFD0c7bF6#2r?=^NQt0IWsQ9SfrbprsKOJ~3g{}<5E3zvh=Ul% z8jxbEib#Y4U<=8Rx_>e$=IPU7Ff0a>`Ln5?`s}Fi{fX~+b`AVET7323WbBK{`f>k# z?~U(|2CwJ6!XHhG@nGiZ#GfYoD}(0IXgKOI&WtKvW{DT-JUdf*??N(N_~YTsw+cU= z3=3Z}FKO-gv_E1qK-8@Nmhm%x#6a%+c_&QfyaN=Uxeb932#ekTa(7p_)hVQc9d0ud z2il=Qea3mofq}3%<=K|&%2{59g}vc8(4c{?P&~Ljre;@m*@)dh^mk~YQl3~OI!4?U zHDwp>fFp;NFPqFufUsx@k%{xw5Ng5V9vtc_Nuw4jIjD=gnnEaP8M+53*;wuH%W_8< z9HfS>$V8R@hVmJm{W_OZOO?A|s4aKWMy=#zy6i?*I-M#jtq$c_tV?M*R4Z1YV*dPE zqkmUqSa0rE4c%yT8jZMa;GW)vi$TLu+m>y^?=bj)_uXO_)lQ%Yb*{bo4>gmwrBgYB z>Li`UKsW2#mQzMGtjM6#MuqqrA-}3C(N!gm)Xl_^C3(v#hDHJUFhHY!pi(_boU~Ft zu@OVH!K?Cx5r*4TJ_M}hop~9a67hU4Y(?P8N0lQ9n^TRqEjN`-xihA9LXV diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/prover.mv deleted file mode 100644 index fd18c78ff2aa94ef33be0e3ad0a8c28e54c813d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 ocmZ1|^O~EDfq{XUk%5VwiJgN}fq{XopeVmAwFoGR4=^zR0Mcj#rvLx| diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/random.mv deleted file mode 100644 index a5899ea27f668b57c68173ac9da27b540694fd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4287 zcmc&&-EteZ6+ZY|U;*qdmzJo1TMTW>abnAoD3`g(#7#0z;%GXPX)?+5fNMIYxC} zUlsTN!Q{VLs{Y6R$@Smm&(i!Y{wVrSd}{w?xBY+ZUmD3z+cnx@h8<8un{<~R(HB=&sOASajRv>-2${4ZT9m|O82YBb(@75WK-3?1}>pe^AKHH?| zL6b3~ll7EzN*ko#U*90(Zr)awAUt3I2pBObR>lCj;0CaO0uTP;M2N(4Kov{Aue<> zo^V+bQU)>$3{f%!Os0&qWTfegk(7)Cey19h!^$Om=p;0eL|^p={o(Vh8lDz|V$_=q zN3NnjAApX3|MKJEU{buCh_65YB>tutjn9XJqOW`X{-_v_qu%9ZG3blqlW}x>b$VKi z^vUoF2BYX?RP-iA-Y-VyFN*E}F1p7T!;?R$;&OO$wsZ>fv+nTtkHyKPJN1@)UtuV^ z$HU=8dQJT>DaO~rtG)eBV&Tus<`H zQ+eE;Q+eE;skrM%ou#?=nSwlf-aAP`*Bzhr4!VfU&->~;tg$&CcZ=tjlOOEGu-AtP zch+Go<#SFq2{B%S_;GjAYx%%kD|_eXLwv_TeO?0inw< zrPt^M5L2~?=634@ANHep_w34?kz<)P-4E#ccF%rC!G zl-jPw*Y}pgFXuOnxP=YPWm_cTU2zZFii`Iww@GZvaBEwZ9_CwGH>Fk%5%2*}A3)^v&QHOhGS&c0@-ju6q z)3H**c!+)X^_Dg2h}T$#rMY)%MTI$19?_f#u)*8#+ELEDv8KkCX5gFhE*N5-(E>wu zq?hVmJnfv6hnCG5?W%8`DV_5jr%MmFK2pDpedHqf)Oe+SXIT~aRZbgCubh%! z%{u~0YcjFypque!EU3xkGMBKqp8-9uNiQ7BH}e(Gok)4U`Wc~E*Ez=tNB3`Fz17lZ zj2f0QwG1kP9(Wz)nd2$TS9v%F-+!tN7J_ND?m0XF3HR12Yg=;7DwY^ax#~nt1z$jK z9c!oN3BqbP)lYJ(Tk=6r@)1I57j+`_z-cdLYviR9IBBJgTk>NoOP`tkH2)-bGGHiM z1M7PbvV@}uyoZO5yx7}@Q&C2V+AUc}@|0H=2ZRHrFQ%ri9gye9vpoWUkZoyAOFjaC z;Na8z2n(Y3%&y}ND9Sw+Agtpnary`+;S579jIfh`8Z0q%6b@IkpR7KEWa+pe3lw3V^i{3V{7J1t4_}RfMp=h0msXcs-lXVo0>+mjC7(j4PO&+(v|;|128Fk*YQIOX0^peo`~R@qY%~QU4D+YnTTB diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/sui.mv deleted file mode 100644 index 27aea7d069801e4454574d1448cba0b16f5cffb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmaJ=J#W-N5S^L*^saN4T#f_~1rbF$KDv{TB19?*L_tzpj&DyGUF?%TL=MqVP>=>{ zI{pL=KLCk}A3=e{pJ3Kp+RRFCM{nM~8Cm16cm8?}01jb9qleAlu?b80d+%ZAgi3&(oQ@FH>&=Xo9FBug` zulV*NLgc+>K<B#}e*W4ReF5gSG>HlzfU zd73ZtstEG9E~_-c^U&qcT}Q zPMf7U+qe{LFfLfug{Qji_qvcRP)e?wlD1!H|;h9XJysZ z8+X@TWW{FmzFG3-To-g*k!vXIl|oovjUkx(`Q>p;Is5HTqDj>K`6%!GxKwvz<+^Yr z<7XePzH}7V6SoF;`M|;b9cR>mG|GEGgNKnx;x917ft;wlSb)Q10*?}-jWKox9%j7O fsq{GGeVd7tw#dktOogYJ;w>RW2|{{cg(mn1{%U-+ diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/table.mv deleted file mode 100644 index eb33a26e5dfcff7e36ee8ec099b2f102dd655d25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmaJZ5Xsn8H&s@ zxNKks2SLi9Q54KjmMlkAu^es5nK-K0g_2wVm5@W`tjk^DoWsNrTA&o7O>zvF0O@On zI*lFP&?H5S8}UyH3N(21FvxP!jFb%D*r>XgOcy@A*gfr5!S8~2@%)*XG>x8in@zXP z4p1-O1T%{nlXlhX#xH#EuJL`?bo<&b*I_T4O}BQoZ*@0)?Po!6{IYxNW#7K@DsWd>*wtJ#wiTcDe~W~70*OkMxN+b>4Od>F;u@ui)mF4|l(=nr<0(*Yh*tn{ zMBKR}9)gE}Z|z2a5NxEGZ@&52nf2t|{qH^{qQI0&I#7GBS>N)#ieXU{{lbMTaAt%(u_dt-aoQTJn5Bb?Q#iAhwzNTtGtAVnNLC$EN)%|%C}tV8 zI)F+YfG@R-;Eib+l{W@TGA53>lpIZt&nwf)m(|oBtzXphrdl^@GMlBx^>SHXyH1TS zE*mqA-g&bMvuf2W>zi?Pv1o4eY*{ao7MinF$ED}h{G>Tm^Xl3x>c#kYGJRzim#fnj zrOWD~zN+l%Y<_ZHHT7Jtt|tp0#kg}NP3+9Ja(q=yU9%pyx33%Q&Hs)lvvDiK8yKIQ zIjTM-FW|B3F|Xh9F)>U0CJ`ZAX4qvUj=Ds4*vq?fpluRrWQ>-cQ)$J<2n-FwiG#8C||d*fFTZ3I4(`D oS|mU^B21=AEO8vbYs~0TUGM#)`meTgR78f9c!Dy=zZYNTC$PL}rT_o{ diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/token.mv deleted file mode 100644 index 541a976b6390d63629fd96069f5bf5ee8d3b641e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4516 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 GWd8%!Pj?mo diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer.mv deleted file mode 100644 index 22bd0aa3ec7144d2f5a4bc1709bbb08172441079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmaKqy-ve05XbK$A5QF~v}I&qW?*2UVrF3lF-N6wAqZNOv>jLx55NL5kH9lAR=fZc z7dI*G0G96jyF2^uQ!ej&OC10}g5Z&ta__>k%D+Dd-|!pN3-1RXd=!7O(n}`u#jlt= z`IJ8U1UnD_5-LOp1w4=pqJmhw0j8Qm@di@Ikz*|d1xmbu#PfwcSM508bqXe^WqT?D zO%cUph$8R-BcM=`t^tG9rjUIx62m|d`gC?0o!gNu7RBV6FV9YsacS+N&8Ankb~Nj4 zMOktGa7RTRtctr2^Q*gJlx>|!n`G%kZNCYtn_=0CcADI*98RjSEyL!lX?FKae-%hq zO)FWEn@yGOX5g-v1E%oLO5JMx T@-ggE#00UJ{6k=*DOm(RYcg^l diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/transfer_policy.mv deleted file mode 100644 index 324afef2567233aaead248d6c441d829497275bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2529 zcmaJ@$#NUV8UA~l?wKA82oWR*iV_!*qNs(oEQuV*l4V3J#(!)?L^Ve1eEo$O z{+Y`^iu>yC;vYi)UVpF5_vy#cztTs^Uu%!;KWl0F@7iBf?GMXK*`Jn|=wo)5eM(JQ zrK_|}@6!kLn4Zul^h>hD@YAV>Ccs$uc@m(~j58)QBjPnpf+Tp7c{$BB=}eN5Da8>d zn{rC)nhB!!h(Y0y!vwWCROoXR0bbS~whYYErC18$5$z{7jLWIy#HmpW!;P%&v3zMJ z^fYTg<=N6Dz)rRdc&E7nc(1t%c+Jn*#z7nK_Ki9teqFX0iC^3VS3H+njO6Znw*en~ zh+yPLw=h>r$C7KQRyq&;u+ynCt&Tr>03_OMOXR$MMUp<)UtvZcZd@V#S!0FF-euTN zK7@ctp6mhIhu3x~UAtFjBHfZ}fH!k!r?=Mb0vLzRN?(A)E z?JTceT3y*}Z(coYZQg9%Ztb^{`|C%|2M4XoM{AoKkFFfuY6+9z&(Nb7wKAzT8Mh3G zkeNng>3->BMN0pr9cbqXkQXNgpK&0t5MO`uJbN)NhLaOF{&I9$_AVOlqECynmH(lPT~WDy>s{(I zH>t*>3)inN=wG?tO+k!bynQ+vR_<+OUR<2HUljuM}81}p8W%a5*F3!^haWWb>+n){w7u}Q6o%U<}i(xS+doxVBL0Ks`IIAv{d*gnek{J4P<%RWS(@UiKrz=f+iB4w2kzcQMiB zr0ZjlW#tB9=*}(PMM}}=@;fIc(^6K&YiFwYhfrTkx-%b1^|tG4iyp=mde}vQ zoS2sVCA{6iwCWddB-I8#5I!~h2_JzI54&uR&r;ypg0HRK2|Sh2PTmL zD$cGjYKt~&^R{fO2mV}<*oCmI@SHk?ql;*L%Tmsy#5Tm3KSIN^pRmSusxsBsNuwm{ zupBEsg;pwZkxI+0w4#H}wy|xaj^LamZCgtT%O%7V1lVEYdLD&C?)u$?4s+~{$JE@G zv8rPy#LlMWe#Ubn_Yh9(-6V9(@?=kLsGYfl+P6_E)xnGd$1+uxjc~8`0{&`TA^G?3L5|WWoykUdmhy~$(n|eK zNXI;{Z_8!XLNFR9vH77qyYfzrf7VL17s@ow;azpZOR;@x{2?A5mtc5*xuAByY%wjf%)b^olVgnnQGqOQT~I9Yr*GG&OO^ni2p?5pYA?3vP3^ z71oG41yq3A5DLr@6(+10MTP`LZd8;r;75O+!r;d2%kh&NgFS|1Nvo+ZSUSV$D;H*O%nK zg4NlxYkhNf-|uYLTqx5#bhbVV7sXd+$=i`zFaNR0jo!_2bfeYo^o`~6YW(8TOM>+7 zV3V_E!m;U=|Bx`;w|>t2PWB;?x>7ehS)oKK;`oUw97IOzy7%2+jAnn_MMlY-BRPsw6dSL*^x{DAR}p4MAwZaGG6%4h8(Zf~&w M&R%mOHxN600&eep(EtDd diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/types.mv deleted file mode 100644 index 0e63a979b70a559ff45d2b13c175f5770649880d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmZ1|^O~EDfq{XIk%5VsiH((mjh#=5LqmbbgN1<+D9*^p#K^`8q=Ykzrg>(~VIGNd+s$bIT`-M_W%q>VA8YD`@b!=V~uUpHZKqg9i>KC9Q`5PH-9 xd(HU$UJpUCg|FQMXSfT3AjhF{eChGTGE?R8s95BWvUor#WaiqF#~h2i_X-l!B}D)L diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vdf.mv deleted file mode 100644 index fdcfa40edde8403e0134f503d003c012c74064f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmZ1|^O~EDfq{XYk%5VsNrY8QlwI3{qga7$G9wqyTt*cJCZHrE2muLZCT0c(79hdM z#>K?Q#l!-nAc&cfk%2cOu{a~XBtJegub{L<421_2D@iTNOUz*|OG)Db;`p-EqRg~P wVFVMd1ZW{Xz{Jb}mj=3tg_)Z{kdX=KdmegKLOzg#DlL%&#CiU8ZbzXFB&>{}u9nQQl&O*-Iw!D^^winKXfV9)~ zn%(PpG2HWoSnn5D_l7CfKJ8;YEU=310W4y_53hLin3#-etNlDu#h^cEsoceCkPq`= zF&vO$Rk*(EIbus9p@gN`ZoDFPicV@T?+k3<)mtdMtP^G{7%TJ6&QhcarLaMGuWUlF zO9(Mdg0-TcJ8dHD?uMmX(Oj^~To2A>9r zYPs%AX6yOg?D1q(Q!&_h780eEFRy0vS*4Kz$B~QqLNBZ7{I=@V;v+U@S>0C4Ri##w z4_J`Jc&eZgg)^Aj>SjE>UTDbmd>Nj=!;5&>6+A5C9YV&K;P8|2E=X=}mhny=ZYs$I3+35*s?R^pY$l@D*R?B0MY$kmZt{ z2tHAY*DRzD@1!)Mi`;)Y!td!WjS6Y5asU;8?tY3l`AZgf)a23>)#}_Mvf|TxgvSC$ z(n~1?GX+`z$h=feL|t&S%w+^FLii6%8_x`W?L}p<+si42n)>N^BR+JnKt35!WX%V&Wr7d$*J=}v&W|^jZW2R)XUf( z-f1T@W#wg&8LKY`HXJR$3!J8Px2RRt2#3Oa(xQt3bp|JaTXdFDX+gu48S2B=(0Qs3 zGLg|$fpUYg6}2tBZI~f>!wi>&Z#x|wH=$0{y#xOy!b$K~r|K}uyfZ~N9B0zEIN3>yXXLsAG z;wUwIhOn;azDj9Dn`hSG3o+&()Y+09=e@y5A_rNrh#G< U_dJvCL(nkrXpDa{cuYdk|ENE*umAu6 diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/vec_set.mv deleted file mode 100644 index 52b3e95a454ee6b06413b693650e1b1c2abb2bed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmaJ$}hT?>hC9=rbk!?kUf&%dy=&ASz z{09oe&!C{9rs1sKJiQUo4>OEq7Lj& zwH5v-7e8nzKk9E%eYZ0EVTEq;oVSS`D`IktEQT0|P03ims%W7zim|{O&I6;%Ja7TD zMOIcW0KJJoXP{xd5GF1w3!KpcxFtYYl(5Uj4EJe?vXCH^H?kolB6C0Ur6-QWMgGK1 zY)vefolIcNe93WJz|m%is74%^f|GNWd=RCwry%?6Y;3yLzDP&U)98=7c6`;e!$eX$ z4&`wg#=g5)4&5r5v^pCvir0O&TE0magF8v%vN?Vmul8kkHd;idek_`H>?V+g+D`rMi8lkb&`jK-ovCL9iUa03&x2r0^Of+O?R|25sh$kFVX{w z{6s`S>>~t`Yc6H7OD!xKj)+deu1c9nt;Jm3uuq2~7!k}}q}t>$p4P5R!>A%XBFQ!L zMn$!)U5Q~jl(p`zo|{l{MNg&nMn{$+CqvvmNdTMgt+gc#wJBAQp!W1_69Pm*9!ua| qy@SVKLZZ|KrgEw%7qVT7L1o!h2RsQ6ss4Y6_9i&Khp?D`pwM5RzF~6! diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/versioned.mv deleted file mode 100644 index 2c190c4a5eac883dcb1be307621c818d03164011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmaJV|5Z%Yseaml~6e+?`&{4a0n)HNLqgXe=jAI2wc?}(Z!pAW15qtnMQ1Jz< zEKlgrNPBkA?zviN_sj9GpaCEtSh6!dK35-o_Ng>K@Hg7;e4>A{_kVa4KdY~pf6ElS zfB++yfr%@BWs4yEiG79x@)PWgKI+%>7 z0_36tifV?Ih9QE}l=q6p)_vxsIURhk$O>uW~)s$88?PIa-`!)y49Hj1msfy2Dv8iO} z|GVUmJg14G<%JBGjx3EC5CCJKaqeLPk#io(N(5X&U_wbcB^!b>qRuy7wq+kLk@&!L z0;yQa;&jZw!w{rS820dH+3P1rnPmAS@D!ukCtfO-aVN=>pwAMTI9K+**U d7~-6?i03iDRCaUkIYbcmXY6L1bn&cP*^ zC2~L%%#NPk%xY(!=DluzCK>=Nf+5ovo4e|0FM7mxG#|9DpM|wAVq@)1ocErjg#oU^ z8l)f$AVfeUK_CJ2xC9H#k^pf486Xl8psyH|jsUdbM^P*RHBV5Ch$gggdD6%Tt+-re zipUL1t4z_5K5iRdU&SZ$gGt@Gc`Hs2NA}D${?fbhaAfjX>0Mp8esS%JarQ8-CRe`B ze7W_vk$E1_)On>#SGm@aFSVaeXRcWvyG2%1xxdZo{MMyE4Z8r%gni(g+4I~CtItdr&N=Kl*`;J<ltp`Nk^6N9lqX)u@~WdeQJ qAPihEN1~1riH-`A9hIa4jT0CGh8V=8Lx&>Ri8^9}yT~BeXa!${!dQ&} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/dependencies/Sui/zklogin_verified_issuer.mv deleted file mode 100644 index 2ea6fd528bcbec082637380baab9319f5f95e9e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmaJ;J5C%y5Uo%Drh9gl!D}ob9FsY;2$68IsaZ%z`{{)-s~Kr#Y!;5d8Jt++0M5Au zv2Wl@xMp{qAVdY#Rqs_-KlS@{^fwp)2ne419v_~lucRlR?E^le`$MPZCy)GZ4(St@ zgGZ%cA2SFrggsyf2o{JGC?tSXT1Y@D%L*XZlC-e^##ul`10b6yARiLoVXDxnfk#Lf zjcn4A5giES&^l&4>;ddgPv}T^?g>gjW<8nnt|_alWU@Z1t1hlPz8HVWE@M+J%eWY~ z?f2NYXe;tA z?{s}z#m2O;TJ*<8i0hhZ)h=V>yLB<&N_zjJmvi^x-4Fj|Y*-Py(<45-74orf28toO zU?)~=gV;Grbs~shN(FIlMA+9XH4^ou3GfaOb4x5O9(ekc`;@(mWSA@EbruLM9tX;u Wptui#Pk_|!azG(Wu1WX)qojYG6kh=V diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/evm.mv deleted file mode 100644 index dad32e9652e91d93851e10cbf440592ea8a42eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515 zcmbtQ%}N773{Encncdm3P$(i*s8qX1FSfTT9;}Dr!Hf6+OKsP7p+B&@EcNJvc<{k| z0$;*ZwBp&okV(ET$(OtxeMANT0t7>bm22`T={UA`_rWV(`*(aHAVd^`1<-&1ObDoe z0F5?4HV6^eVgN#OMDhfYNFkARAt(&N3WlVVc_{O2HPho_l4UBbmM&YB>*VpdObeG4 z$voX8RXSHetWNneJZBHGG3=Ao=*cEb0)(K;ab1Q%N}o&W#< diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/bytecode_modules/gateway.mv deleted file mode 100644 index b849fd41f27dc784b99dd2bd091d53436baab032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3004 zcmbtWOLH8z5e6E-3}!I<-X(WMN<&iOOA=}8VQQQxi6zRhnTL`p+i_Jco8j)58k?MD z?aq=?{z591Lw-TdIp&w-nnNnrR8BtSnh)3qQ#mAuOw}~H8~7UCA27iDVf`P*V~kZe z>r(f%`06(#zonPzPvURn|K9tnr@xJU<^8$x%kYoYQ}f#zMZc^4#jpH*rCR;xipO@? zHecZ{X_dOPPWR{o`aXR`FIZJ_#+j!Xt4EC0@G`tgFedRf@M^&*^qGi!CV9jZS%fDd zNbUPfS0oDpV#W|-_YsSI!lCU8Xs;!Q{IRm~W6#R>eTX9u;@FDsYKV=%_H2e$t{E$T z7NJV^6Nmeu!#(n=j6JiES5`c&)fsEm8jLlqIH}d)Jg8yb_i6<7Hg6)m!zMAY%M;GT z!=%Y%`w1ss%HHE6+uXYUz&7z?vdt6LVe0V#;;2ubS^0DR5WGCtvhoM-Z9#sz4ZnXk z=3MB#)dtu432U?P!*$N1@OyCU@FVEjJioQZ_E+}1)!xC%LHFSH!#jH$mH5HdgUw#N zcefhX;@vok_jdO7x^cX}9dE@uajzG@zth{;zZc)$zq5ZgUW>V}8;o=5Yc4!Zo^JS7 z70O!Z!^=G_W{nii!r+G0Fhp9Qsqld50A6)tg%)i`&3ioy5R0hJ38CwxNefJYdbzH0 z9Y`%T*FqE5HI&JrcmZ|+y6YI%;EDpKxRx9k+u^1_pNomzLP7`Jn_G$_jz>B$41mScJw9&4pv3@`HH zIK31v(=-2NdY%@8OdgN&qV+1f98L1_MKL^1&(A-;%8D|Y`<&r_l9t(Z`i@RsHD8Ya zJ1GX^ES+SoSA6!xiT7DK&Wp3)^S8&NqRifw`tx^}+3WNo6JMOXQol&2=VkQeo4m}< z^GS&$%$IrjW;jl-p;s2V3)fBuWqy_QuNR~HgY>esaL!TIC(_~2OD{&#qEzW*kmuqQ zg`Lg{^G-+O@#s37HT{ced3W$88+_9rXM+sk$NjVz_J^~=`{k&AWmA*`&=FYCFOd68 zD^W>vfU?rOnDnoaLEpOkIk>(EVgnAqUv=TQOsA7r4;P(F-(9bU}&*j&kLloJyav6G~)338ZsazhRlWv%QnZ7$8rNi3g^z=L* z^viKtOuov-dO^5Bidi`;)0^;o_S6-8;6N7fLTQvZk(bFB_1w8 z$v94Mvh9Az>Z}bv+mu>WaZnn;eYG26syc6P%8pu_JH@Wy_J(!OO2}%wV?^W7*l|sr z;0Q;+&7NVvA_=2HFVT@7iX&+8c7!QR@4<2q=&u7Ak2USq3`E3Mc!6b9g*k7p(4bU6flF7qO*4GdJ)cD9u-D zL+#9+SSk9Cm9n{G$%OG{Q-vy7jgVzcB;BNUgjF{xxfS_F8=tDk;L&4*Rc$22Z3dPL z-0WKW)vJQOaKN zDB=bjI5642whua3c=s8A)%#6+26nfj3f8e(9vIcJD@Y9t=9cpsbqK$AFc8-oEo)$R zVT)3Gp|du17P@NF3iM_pWJzm7+I3rgTZ95IOI?73JI`1W)9M07ZR%QB%MP&|ggjZ> ikd~!@mJp2UVOMaGY&6yh|4PK&k1O^Wm$B@5G5Z&WcC$kO diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move deleted file mode 100644 index f9847971b7..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/evm.move +++ /dev/null @@ -1,46 +0,0 @@ -module gateway::evm; - -use std::ascii::{String, into_bytes}; - -/// Check if a given string is a valid Ethereum address. -public fun is_valid_evm_address(addr: String): bool { - if (addr.length() != 42) { - return false - }; - - let mut addrBytes = addr.into_bytes(); - - // check prefix 0x, 0=48, x=120 - if (addrBytes[0] != 48 || addrBytes[1] != 120) { - return false - }; - - // remove 0x prefix - addrBytes.remove(0); - addrBytes.remove(0); - - // check if remaining characters are hex (0-9, a-f, A-F) - is_hex_vec(addrBytes) -} - -/// Check that vector contains only hex chars (0-9, a-f, A-F). -fun is_hex_vec(input: vector): bool { - let mut i = 0; - let len = input.length(); - - while (i < len) { - let c = input[i]; - - let is_hex = (c >= 48 && c <= 57) || // '0' to '9' - (c >= 97 && c <= 102) || // 'a' to 'f' - (c >= 65 && c <= 70); // 'A' to 'F' - - if (!is_hex) { - return false - }; - - i = i + 1; - }; - - true -} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move b/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move deleted file mode 100644 index 5397aca4e1..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/build/gateway/sources/gateway.move +++ /dev/null @@ -1,417 +0,0 @@ -module gateway::gateway; - -use gateway::evm; -use std::ascii::String; -use std::type_name::{get, into_string}; -use sui::bag::{Self, Bag}; -use sui::balance::{Self, Balance}; -use sui::coin::{Self, Coin}; -use sui::event; -use sui::sui::SUI; - -// === Errors === - -const EAlreadyWhitelisted: u64 = 0; -const EInvalidReceiverAddress: u64 = 1; -const ENotWhitelisted: u64 = 2; -const ENonceMismatch: u64 = 3; -const EPayloadTooLong: u64 = 4; -const EInactiveWithdrawCap: u64 = 5; -const EInactiveWhitelistCap: u64 = 6; -const EDepositPaused: u64 = 7; - -const PayloadMaxLength: u64 = 1024; - -// === Structs === - -// Vault stores the balance of a specific coin type -public struct Vault has store { - balance: Balance, - whitelisted: bool, -} - -// Gateway stores the vaults and the nonce for withdrawals -public struct Gateway has key { - id: UID, - vaults: Bag, - nonce: u64, - active_withdraw_cap: ID, - active_whitelist_cap: ID, - deposit_paused: bool, -} - -// WithdrawCap is a capability object that allows the caller to withdraw tokens from the gateway -public struct WithdrawCap has key, store { - id: UID, -} - -// WhitelistCap is a capability object that allows the caller to whitelist a new vault -public struct WhitelistCap has key, store { - id: UID, -} - -// AdminCap is a capability object that allows to issue new capabilities -public struct AdminCap has key, store { - id: UID, -} - -// === Events === - -// DepositEvent is emitted when a user deposits tokens into the gateway -public struct DepositEvent has copy, drop { - coin_type: String, - amount: u64, - sender: address, - receiver: String, // 0x hex address -} - -// DepositAndCallEvent is emitted when a user deposits tokens into the gateway with a call -public struct DepositAndCallEvent has copy, drop { - coin_type: String, - amount: u64, - sender: address, - receiver: String, // 0x hex address - payload: vector, -} - -public struct WithdrawEvent has copy, drop { - coin_type: String, - amount: u64, - sender: address, - receiver: address, - nonce: u64, -} - -public struct NonceIncreaseEvent has copy, drop { - sender: address, - nonce: u64, -} - -// === Initialization === - -fun init(ctx: &mut TxContext) { - // to withdraw tokens from the gateway, the caller must have the WithdrawCap - let withdraw_cap = WithdrawCap { - id: object::new(ctx), - }; - - // to whitelist a new vault, the caller must have the WhitelistCap - let whitelist_cap = WhitelistCap { - id: object::new(ctx), - }; - - // to whitelist a new vault, the caller must have the AdminCap - let admin_cap = AdminCap { - id: object::new(ctx), - }; - - // create and share the gateway object - let mut gateway = Gateway { - id: object::new(ctx), - vaults: bag::new(ctx), - nonce: 0, - active_withdraw_cap: object::id(&withdraw_cap), - active_whitelist_cap: object::id(&whitelist_cap), - deposit_paused: false, - }; - - // whitelist SUI by default - whitelist_impl(&mut gateway, &whitelist_cap); - - transfer::transfer(withdraw_cap, tx_context::sender(ctx)); - transfer::transfer(whitelist_cap, tx_context::sender(ctx)); - transfer::transfer(admin_cap, tx_context::sender(ctx)); - transfer::share_object(gateway); -} - -// === Entrypoints === - -// upgraded returns true to indicate gateway has been upgraded -entry fun upgraded(): bool { - true -} - -// increase_nonce increases the nonce of the gateway -// it is used when a failed outbound needs to be reported to ZetaChain -// it is sent by the tss and therefore requires the withdraw cap -entry fun increase_nonce(gateway: &mut Gateway, nonce: u64, cap: &WithdrawCap, ctx: &TxContext) { - assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); - assert!(nonce == gateway.nonce, ENonceMismatch); - gateway.nonce = nonce + 1; - - // Emit event - event::emit(NonceIncreaseEvent { - sender: tx_context::sender(ctx), - nonce: gateway.nonce, - }); -} - -// withdraw allows the TSS to withdraw tokens from the gateway -entry fun withdraw( - gateway: &mut Gateway, - amount: u64, - nonce: u64, - receiver: address, - gas_budget: u64, - cap: &WithdrawCap, - ctx: &mut TxContext, -) { - let (coins, coins_gas_budget) = withdraw_impl(gateway, amount, nonce, gas_budget, cap, ctx); - - transfer::public_transfer(coins, receiver); - transfer::public_transfer(coins_gas_budget, tx_context::sender(ctx)); - - // Emit event - event::emit(WithdrawEvent { - coin_type: coin_name(), - amount: amount, - sender: tx_context::sender(ctx), - receiver: receiver, - nonce: nonce, - }); -} - -// whitelist whitelists a new coin by creating a new vault for the coin type -entry fun whitelist(gateway: &mut Gateway, cap: &WhitelistCap) { - whitelist_impl(gateway, cap) -} - -// unwhitelist unwhitelists a coin by setting the whitelisted flag to false -entry fun unwhitelist(gateway: &mut Gateway, cap: &AdminCap) { - unwhitelist_impl(gateway, cap) -} - -// issue_withdraw_and_whitelist_cap issues a new WithdrawCap and WhitelistCap and revokes the old ones -entry fun issue_withdraw_and_whitelist_cap( - gateway: &mut Gateway, - _cap: &AdminCap, - ctx: &mut TxContext, -) { - let (withdraw_cap, whitelist_cap) = issue_withdraw_and_whitelist_cap_impl(gateway, _cap, ctx); - transfer::transfer(withdraw_cap, tx_context::sender(ctx)); - transfer::transfer(whitelist_cap, tx_context::sender(ctx)); -} - -// pause pauses the deposit functionality -entry fun pause(gateway: &mut Gateway, cap: &AdminCap) { - pause_impl(gateway, cap) -} - -// unpause unpauses the deposit functionality -entry fun unpause(gateway: &mut Gateway, cap: &AdminCap) { - unpause_impl(gateway, cap) -} - -// reset_nonce resets the nonce to a new value in case it gets corrupted -entry fun reset_nonce(gateway: &mut Gateway, nonce: u64, _cap: &AdminCap) { - gateway.nonce = nonce; -} - -// === Deposit Functions === - -// deposit allows the user to deposit tokens into the gateway -public entry fun deposit( - gateway: &mut Gateway, - coins: Coin, - receiver: String, - ctx: &mut TxContext, -) { - let amount = coins.value(); - let coin_name = coin_name(); - - check_receiver_and_deposit_to_vault(gateway, coins, receiver); - - // Emit deposit event - event::emit(DepositEvent { - coin_type: coin_name, - amount: amount, - sender: tx_context::sender(ctx), - receiver: receiver, - }); -} - -// deposit_and_call allows the user to deposit tokens into the gateway and call a contract -public entry fun deposit_and_call( - gateway: &mut Gateway, - coins: Coin, - receiver: String, - payload: vector, - ctx: &mut TxContext, -) { - assert!(payload.length() <= PayloadMaxLength, EPayloadTooLong); - - let amount = coins.value(); - let coin_name = coin_name(); - - check_receiver_and_deposit_to_vault(gateway, coins, receiver); - - // Emit deposit event - event::emit(DepositAndCallEvent { - coin_type: coin_name, - amount: amount, - sender: tx_context::sender(ctx), - receiver: receiver, - payload: payload, - }); -} - -// check_receiver_and_deposit_to_vault is a helper function that checks the receiver address and deposits the coin -fun check_receiver_and_deposit_to_vault( - gateway: &mut Gateway, - coins: Coin, - receiver: String, -) { - assert!(evm::is_valid_evm_address(receiver), EInvalidReceiverAddress); - assert!(is_whitelisted(gateway), ENotWhitelisted); - assert!(!gateway.deposit_paused, EDepositPaused); - - // Deposit the coin into the vault - let coin_name = coin_name(); - let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); - balance::join(&mut vault.balance, coins.into_balance()); -} - -// === Withdraw Functions === - -public fun withdraw_impl( - gateway: &mut Gateway, - amount: u64, - nonce: u64, - gas_budget: u64, - cap: &WithdrawCap, - ctx: &mut TxContext, -): (Coin, Coin) { - assert!(gateway.active_withdraw_cap == object::id(cap), EInactiveWithdrawCap); - assert!(is_whitelisted(gateway), ENotWhitelisted); - assert!(nonce == gateway.nonce, ENonceMismatch); // prevent replay - gateway.nonce = nonce + 1; - - // Withdraw the coin from the vault - let coin_name = coin_name(); - let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name); - let coins_out = coin::take(&mut vault.balance, amount, ctx); - - // Withdraw SUI to cover the gas budget - let sui_vault = bag::borrow_mut>( - &mut gateway.vaults, - coin_name(), - ); - let coins_gas_budget = coin::take(&mut sui_vault.balance, gas_budget, ctx); - - (coins_out, coins_gas_budget) -} - -// === Admin Functions === - -public fun whitelist_impl(gateway: &mut Gateway, cap: &WhitelistCap) { - assert!(gateway.active_whitelist_cap == object::id(cap), EInactiveWhitelistCap); - assert!(is_whitelisted(gateway) == false, EAlreadyWhitelisted); - - // if the vault already exists, set it to whitelisted, otherwise create a new vault - if (bag::contains_with_type>(&gateway.vaults, coin_name())) { - let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); - vault.whitelisted = true; - } else { - let vault_name = coin_name(); - let vault = Vault { - balance: balance::zero(), - whitelisted: true, - }; - bag::add(&mut gateway.vaults, vault_name, vault); - } -} - -public fun unwhitelist_impl(gateway: &mut Gateway, _cap: &AdminCap) { - assert!(is_whitelisted(gateway), ENotWhitelisted); - let vault = bag::borrow_mut>(&mut gateway.vaults, coin_name()); - vault.whitelisted = false; -} - -public fun issue_withdraw_and_whitelist_cap_impl( - gateway: &mut Gateway, - _cap: &AdminCap, - ctx: &mut TxContext, -): (WithdrawCap, WhitelistCap) { - let withdraw_cap = WithdrawCap { - id: object::new(ctx), - }; - let whitelist_cap = WhitelistCap { - id: object::new(ctx), - }; - gateway.active_withdraw_cap = object::id(&withdraw_cap); - gateway.active_whitelist_cap = object::id(&whitelist_cap); - (withdraw_cap, whitelist_cap) -} - -public fun pause_impl(gateway: &mut Gateway, _cap: &AdminCap) { - gateway.deposit_paused = true; -} - -public fun unpause_impl(gateway: &mut Gateway, _cap: &AdminCap) { - gateway.deposit_paused = false; -} - -// === View Functions === - -public fun nonce(gateway: &Gateway): u64 { - gateway.nonce -} - -public fun active_withdraw_cap(gateway: &Gateway): ID { - gateway.active_withdraw_cap -} - -public fun active_whitelist_cap(gateway: &Gateway): ID { - gateway.active_whitelist_cap -} - -public fun vault_balance(gateway: &Gateway): u64 { - if (!is_whitelisted(gateway)) { - return 0 - }; - let coin_name = coin_name(); - let vault = bag::borrow>(&gateway.vaults, coin_name); - balance::value(&vault.balance) -} - -public fun is_paused(gateway: &Gateway): bool { - gateway.deposit_paused -} - -// is_whitelisted returns true if a given coin type is whitelisted -public fun is_whitelisted(gateway: &Gateway): bool { - let vault_name = coin_name(); - if (!bag::contains_with_type>(&gateway.vaults, vault_name)) { - return false - }; - let vault = bag::borrow>(&gateway.vaults, vault_name); - vault.whitelisted -} - -// === Helpers === - -// coin_name returns the name of the coin type to index the vault -fun coin_name(): String { - into_string(get()) -} - -// === Test Helpers === - -#[test_only] -public fun init_for_testing(ctx: &mut TxContext) { - init(ctx) -} - -#[test_only] -public fun create_test_withdraw_cap(ctx: &mut TxContext): WithdrawCap { - WithdrawCap { - id: object::new(ctx), - } -} - -#[test_only] -public fun create_test_whitelist_cap(ctx: &mut TxContext): WhitelistCap { - WhitelistCap { - id: object::new(ctx), - } -} diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json b/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json deleted file mode 100644 index 010ac8cca8..0000000000 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@zetachain/protocol-contracts-sui", - "private": false, - "license": "MIT", - "version": "0.0.0-set-on-publish", - "description": "ZetaChain protocol contracts on Sui", - "files": [ - "gateway.json" - ] -} \ No newline at end of file diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index 0c4392755a..6db1123247 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -45,6 +45,11 @@ func (r *E2ERunner) SuiVerifyGatewayPackageUpgrade() { // suiUpgradeGatewayPackage upgrades the Sui gateway package by deploying new compiled gateway package func (r *E2ERunner) suiUpgradeGatewayPackage() (packageID string, err error) { + // build the CLI command for package upgrade + cmdBuild := exec.Command("sui", "move", "build") + cmdBuild.Dir = suiGatewayUpgradedPath + require.NoError(r, cmdBuild.Run(), "unable to build sui gateway package") + // construct the CLI command for package upgrade // #nosec G204, inputs are controlled in E2E test cmdUpgrade := exec.Command("sui", []string{ From 11dad7b48b684c9c7ef1b627d3cb6e7e2f2c7f3d Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 18:31:09 -0500 Subject: [PATCH 11/13] fix gosec G306 error --- e2e/runner/sui_gateway_upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/runner/sui_gateway_upgrade.go b/e2e/runner/sui_gateway_upgrade.go index 6db1123247..76b4d08f9d 100644 --- a/e2e/runner/sui_gateway_upgrade.go +++ b/e2e/runner/sui_gateway_upgrade.go @@ -118,7 +118,7 @@ func (r *E2ERunner) suiPatchMoveConfig() { updatedContent := strings.Replace(contentStr, "ORIGINAL-PACKAGE-ID", publishedAt, 1) // Write the updated content back to the file - err = os.WriteFile(moveTomlPath, []byte(updatedContent), 0644) + err = os.WriteFile(moveTomlPath, []byte(updatedContent), 0600) require.NoError(r, err, "unable to write to Move.toml") } From 87f12f2f0d060d882ae0e662479b00ee0c3f85ed Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Tue, 13 May 2025 23:42:04 -0500 Subject: [PATCH 12/13] uncomment previously commented tests during development --- cmd/zetae2e/local/local.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/cmd/zetae2e/local/local.go b/cmd/zetae2e/local/local.go index b62d2b7c04..2fa6f10119 100644 --- a/cmd/zetae2e/local/local.go +++ b/cmd/zetae2e/local/local.go @@ -517,20 +517,20 @@ func localE2ETest(cmd *cobra.Command, _ []string) { if testSui { suiTests := []string{ e2etests.TestSuiDepositName, - // e2etests.TestSuiDepositAndCallRevertName, - // e2etests.TestSuiDepositAndCallName, - // e2etests.TestSuiTokenDepositName, - // e2etests.TestSuiTokenDepositAndCallName, - // e2etests.TestSuiTokenDepositAndCallRevertName, - // e2etests.TestSuiWithdrawName, - // e2etests.TestSuiWithdrawAndCallName, - // e2etests.TestSuiWithdrawRevertWithCallName, - // e2etests.TestSuiWithdrawAndCallRevertWithCallName, - // e2etests.TestSuiTokenWithdrawName, - // e2etests.TestSuiTokenWithdrawAndCallName, - // e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, - // e2etests.TestSuiDepositRestrictedName, - // e2etests.TestSuiWithdrawRestrictedName, + e2etests.TestSuiDepositAndCallRevertName, + e2etests.TestSuiDepositAndCallName, + e2etests.TestSuiTokenDepositName, + e2etests.TestSuiTokenDepositAndCallName, + e2etests.TestSuiTokenDepositAndCallRevertName, + e2etests.TestSuiWithdrawName, + e2etests.TestSuiWithdrawAndCallName, + e2etests.TestSuiWithdrawRevertWithCallName, + e2etests.TestSuiWithdrawAndCallRevertWithCallName, + e2etests.TestSuiTokenWithdrawName, + e2etests.TestSuiTokenWithdrawAndCallName, + e2etests.TestSuiTokenWithdrawAndCallRevertWithCallName, + e2etests.TestSuiDepositRestrictedName, + e2etests.TestSuiWithdrawRestrictedName, } eg.Go(suiTestRoutine(conf, deployerRunner, verbose, suiTests...)) } From 30b8b49e0823eeb51bf146696c881729d660ba3f Mon Sep 17 00:00:00 2001 From: Charlie Chen Date: Wed, 14 May 2025 11:20:10 -0500 Subject: [PATCH 13/13] add more description to README file to explain the sui upgrade package used in e2e test; unify the solana and sui upgrade test assertion style --- .../sui/protocol-contracts-sui-upgrade/README.md | 14 +++++++++++++- e2e/runner/solana_gateway_upgrade.go | 15 +++++++-------- e2e/runner/upgrade.go | 5 +---- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md b/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md index 03d7d95305..293412f038 100644 --- a/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md +++ b/e2e/contracts/sui/protocol-contracts-sui-upgrade/README.md @@ -1,4 +1,16 @@ # Zetachain x Sui Gateway -This package is only used for gateway upgrade test +This package is only used for gateway upgrade test. +The `sui client upgrade` command requires the presence of the whole `gateway` package for re-publishing, +so we have a minimized copy of sui gateway project in here to help the upgrading process. + + +The source code is copied from [protocol-contracts-sui](https://github.com/zeta-chain/protocol-contracts-sui) with one single additional function added: + +``` +// upgraded returns true to indicate gateway has been upgraded +entry fun upgraded(): bool { + true +} +``` \ No newline at end of file diff --git a/e2e/runner/solana_gateway_upgrade.go b/e2e/runner/solana_gateway_upgrade.go index 0ef0959e2d..2bfa7b1d53 100644 --- a/e2e/runner/solana_gateway_upgrade.go +++ b/e2e/runner/solana_gateway_upgrade.go @@ -17,7 +17,7 @@ import ( ) // SolanaVerifyGatewayContractsUpgrade upgrades the Solana contracts and verifies the upgrade -func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey string) bool { +func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey string) { r.Logger.Print("🏃 Upgrading Solana gateway contracts") pdaComputed := r.ComputePdaAddress() @@ -31,10 +31,8 @@ func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey strin err = borsh.Deserialize(&pdaDataBefore, pdaInfo.Bytes()) require.NoError(r, err) - if err := triggerSolanaUpgrade(); err != nil { - r.Logger.Error("failed to trigger Solana upgrade: %v", err) - return false - } + err = triggerSolanaUpgrade() + require.NoError(r, err, "failed to trigger Solana upgrade") r.Logger.Print("⚙️ Solana upgrade completed") pdaInfo, err = r.SolanaClient.GetAccountInfoWithOpts(r.Ctx, pdaComputed, &rpc.GetAccountInfoOpts{ @@ -57,10 +55,11 @@ func (r *E2ERunner) SolanaVerifyGatewayContractsUpgrade(deployerPrivateKey strin require.Equal(r, pdaDataBefore.Authority, pdaDataAfter.Authority) require.Equal(r, pdaDataBefore.ChainID, pdaDataAfter.ChainID) require.Equal(r, pdaDataBefore.DepositPaused, pdaDataAfter.DepositPaused) - return r.VerifyUpgradedInstruction(deployerPrivateKey) + + r.VerifyUpgradedInstruction(deployerPrivateKey) } -func (r *E2ERunner) VerifyUpgradedInstruction(deployerPrivateKey string) bool { +func (r *E2ERunner) VerifyUpgradedInstruction(deployerPrivateKey string) { privkey, err := solana.PrivateKeyFromBase58(deployerPrivateKey) require.NoError(r, err) // Calculate the instruction discriminator for "upgraded" @@ -86,7 +85,7 @@ func (r *E2ERunner) VerifyUpgradedInstruction(deployerPrivateKey string) bool { decoded, err := base64.StdEncoding.DecodeString(out.Meta.ReturnData.Data.String()) require.NoError(r, err) - return decoded[0] == 1 + require.True(r, decoded[0] == 1) } func getAnchorDiscriminator(methodName string) []byte { diff --git a/e2e/runner/upgrade.go b/e2e/runner/upgrade.go index 24b3085f7d..a41637f8d8 100644 --- a/e2e/runner/upgrade.go +++ b/e2e/runner/upgrade.go @@ -28,10 +28,7 @@ func (r *E2ERunner) UpgradeGatewaysAndERC20Custody() { // RunGatewayUpgradeTestsExternalChains runs the gateway upgrade tests for external chains func (r *E2ERunner) RunGatewayUpgradeTestsExternalChains(conf config.Config, opts UpgradeGatewayOptions) { if opts.TestSolana { - require.True( - r, - r.SolanaVerifyGatewayContractsUpgrade(conf.AdditionalAccounts.UserSolana.SolanaPrivateKey.String()), - ) + r.SolanaVerifyGatewayContractsUpgrade(conf.AdditionalAccounts.UserSolana.SolanaPrivateKey.String()) } if opts.TestSui {