aptos/nft-bridge: Tilt integration

aptos: update Docker image
This commit is contained in:
Csongor Kiss 2023-01-11 15:30:13 +00:00 committed by Csongor Kiss
parent 9824d71fe1
commit fe5ca53a98
10 changed files with 84 additions and 28 deletions

View File

@ -1,6 +1,6 @@
# first build the image
(cd ..; DOCKER_BUILDKIT=1 docker build -f aptos/Dockerfile.base -t aptos .)
# tag the image with the appropriate version
docker tag aptos:latest ghcr.io/wormhole-foundation/aptos:1.1.0
docker tag aptos:latest ghcr.io/wormhole-foundation/aptos:1.0.4
# push to ghcr
docker push ghcr.io/wormhole-foundation/aptos:1.1.0
docker push ghcr.io/wormhole-foundation/aptos:1.0.4

View File

@ -1,4 +1,4 @@
FROM ghcr.io/wormhole-foundation/aptos:1.1.0@sha256:9240135c950207e0bbe70d188999343b59d50d506dcc67c1b5586c1dd57b443c as aptos
FROM ghcr.io/wormhole-foundation/aptos:1.0.4@sha256:0610c97ba32aab7113765b05a0c71d75b3842f7ee11ff8d7f75bd0ea03ad95b2 as aptos
# Support additional root CAs
COPY cert.pem* /certs/

View File

@ -125,6 +125,7 @@ run the deploy script again. However, a better way is to run one of the followin
``` sh
scripts $ ./upgrade devnet Core # for upgrading the wormhole contract
scripts $ ./upgrade devnet TokenBridge # for upgarding the token bridge contract
scripts $ ./upgrade devnet NFTBridge # for upgarding the NFT bridge contract
```
Behind the scenes, these scripts exercise the whole contract upgrade code path

View File

@ -38,22 +38,27 @@ fi
WORMHOLE_ADDR=$(worm contract "$NETWORK" aptos Core)
TOKEN_BRIDGE_ADDR=$(worm contract "$NETWORK" aptos TokenBridge)
NFT_BRIDGE_ADDR=$(worm contract "$NETWORK" aptos NFTBridge)
NAMED_ADDRS="wormhole=$WORMHOLE_ADDR,deployer=$DEPLOYER_ADDR,token_bridge=$TOKEN_BRIDGE_ADDR"
NAMED_ADDRS="wormhole=$WORMHOLE_ADDR,deployer=$DEPLOYER_ADDR,token_bridge=$TOKEN_BRIDGE_ADDR,nft_bridge=$NFT_BRIDGE_ADDR"
echo "[1/5] Deploying deployer contract for creating resource accounts..."
echo "[1/6] Deploying deployer contract for creating resource accounts..."
worm aptos deploy --network "$NETWORK" ../deployer --named-addresses "$NAMED_ADDRS"
echo "[2/5] Deploying wormhole contract at $WORMHOLE_ADDR..."
echo "[2/6] Deploying wormhole contract at $WORMHOLE_ADDR..."
worm aptos deploy-resource wormhole --network "$NETWORK" ../wormhole --named-addresses "$NAMED_ADDRS"
echo "[3/5] Initialising wormhole with guardian(s) $GUARDIAN_ADDR..."
worm aptos init-wormhole --network "$NETWORK" -g $GUARDIAN_ADDR --contract-address "$WORMHOLE_ADDR"
echo "[3/6] Initialising wormhole with guardian(s) $GUARDIAN_ADDR..."
worm aptos init-wormhole --network "$NETWORK" -g $GUARDIAN_ADDR
echo "[4/5] Deploying token bridge contract at $TOKEN_BRIDGE_ADDR..."
echo "[4/6] Deploying token bridge contract at $TOKEN_BRIDGE_ADDR..."
worm aptos deploy-resource token_bridge --network "$NETWORK" ../token_bridge --named-addresses "$NAMED_ADDRS"
echo "[5/5] Initialising token bridge..."
worm aptos init-token-bridge --network "$NETWORK" --contract-address "$TOKEN_BRIDGE_ADDR"
echo "[5/6] Initialising token bridge..."
worm aptos init-token-bridge --network "$NETWORK"
echo "[6/6] Deploying (& initialising) NFT bridge contract at $NFT_BRIDGE_ADDR..."
worm aptos deploy-resource nft_bridge --network "$NETWORK" ../nft_bridge --named-addresses "$NAMED_ADDRS"
if [ "$NETWORK" = devnet ]; then
echo "[+1] Deploying example contract..."

View File

@ -12,13 +12,24 @@ DOTENV=../.env
# if a new VAA is added, this will automatically pick it up
VAAS=$(set | grep "REGISTER_.*_TOKEN_BRIDGE_VAA" | grep -v APTOS | cut -d '=' -f1)
# TODO: this will not be needed when the sdk is published
TOKEN_BRIDGE_ADDR=$(worm contract devnet aptos TokenBridge)
# 3. use 'worm' to submit each registration VAA
for VAA in $VAAS
do
VAA=${!VAA}
worm submit $VAA --chain aptos --contract-address $TOKEN_BRIDGE_ADDR --network devnet
worm submit $VAA --chain aptos --network devnet
done
# 4. next we get all the NFT bridge registration VAAs from the environment
# if a new VAA is added, this will automatically pick it up
VAAS=$(set | grep "REGISTER_.*_NFT_BRIDGE_VAA" | grep -v APTOS | cut -d '=' -f1)
# TODO: this will not be needed when the sdk is published
NFT_BRIDGE_ADDR=$(worm contract devnet aptos NFTBridge)
# 5. use 'worm' to submit each registration VAA
for VAA in $VAAS
do
VAA=${!VAA}
worm submit $VAA --chain aptos --contract-address $NFT_BRIDGE_ADDR --network devnet
done
echo "Registrations successful."

View File

@ -30,8 +30,9 @@ fi
WORMHOLE_ADDR=$(worm contract "$NETWORK" aptos Core)
TOKEN_BRIDGE_ADDR=$(worm contract "$NETWORK" aptos TokenBridge)
NFT_BRIDGE_ADDR=$(worm contract "$NETWORK" aptos NFTBridge)
NAMED_ADDRS="wormhole=$WORMHOLE_ADDR,deployer=$DEPLOYER_ADDR,token_bridge=$TOKEN_BRIDGE_ADDR"
NAMED_ADDRS="wormhole=$WORMHOLE_ADDR,deployer=$DEPLOYER_ADDR,token_bridge=$TOKEN_BRIDGE_ADDR,nft_bridge=$NFT_BRIDGE_ADDR"
case "$MODULE" in
Core)
@ -40,6 +41,9 @@ case "$MODULE" in
TokenBridge)
DIR="../token_bridge"
;;
NFTBridge)
DIR="../nft_bridge"
;;
*) echo "unsupported module $MODULE" >&2
usage
;;

View File

@ -43,6 +43,21 @@ export async function execute_aptos(
if (contract === undefined) {
throw Error("nft bridge contract is undefined")
}
switch (payload.type) {
case "ContractUpgrade":
console.log("Upgrading contract")
await callEntryFunc(network, rpc, `${contract}::contract_upgrade`, "submit_vaa_entry", [], [bcsVAA]);
break
case "RegisterChain":
console.log("Registering chain")
await callEntryFunc(network, rpc, `${contract}::register_chain`, "submit_vaa_entry", [], [bcsVAA]);
break
case "Transfer": {
console.log("Completing transfer")
await callEntryFunc(network, rpc, `${contract}::complete_transfer`, "submit_vaa_entry", [], [bcsVAA]);
break
}
}
break
case "TokenBridge":
contract = contract ?? CONTRACTS[network][chain]["token_bridge"];

View File

@ -58,6 +58,9 @@ exports.command = 'aptos';
exports.desc = 'Aptos utilities';
exports.builder = function(y: typeof yargs) {
return y
// NOTE: there's no init-nft-bridge, because the native module initialiser
// functionality has stabilised on mainnet, so we just use that one (which
// gets called automatically)
.command("init-token-bridge", "Init token bridge contract", (yargs) => {
return yargs
.option("network", network_options)
@ -65,7 +68,7 @@ exports.builder = function(y: typeof yargs) {
}, async (argv) => {
const network = argv.network.toUpperCase();
assertNetwork(network);
const contract_address = evm_address(CONTRACTS[network].aptos.core);
const contract_address = evm_address(CONTRACTS[network].aptos.token_bridge);
const rpc = argv.rpc ?? NETWORKS[network]["aptos"].rpc;
await callEntryFunc(network, rpc, `${contract_address}::token_bridge`, "init", [], []);
})
@ -91,13 +94,6 @@ exports.builder = function(y: typeof yargs) {
default: "0x0000000000000000000000000000000000000000000000000000000000000004",
required: false
})
// TODO(csongor): once the sdk has this, just use it from there
.option("contract-address", {
alias: "a",
required: true,
describe: "Address where the wormhole module is deployed",
type: "string",
})
.option("guardian-address", {
alias: "g",
required: true,
@ -108,7 +104,7 @@ exports.builder = function(y: typeof yargs) {
const network = argv.network.toUpperCase();
assertNetwork(network);
const contract_address = evm_address(argv["contract-address"]);
const contract_address = evm_address(CONTRACTS[network].aptos.core);
const guardian_addresses = argv["guardian-address"].split(",").map(address => evm_address(address).substring(24));
const chain_id = argv["chain-id"];
const governance_address = evm_address(argv["governance-address"]);
@ -251,6 +247,14 @@ exports.builder = function(y: typeof yargs) {
.positional("package-dir", {
type: "string"
})
// TODO(csongor): once the sdk has the addresses, just look that up
// based on the module
.option("contract-address", {
alias: "a",
required: true,
describe: "Address where the wormhole module is deployed",
type: "string",
})
.option("network", network_options)
.option("rpc", rpc_description)
.option("named-addresses", named_addresses)
@ -265,7 +269,7 @@ exports.builder = function(y: typeof yargs) {
const hash = await callEntryFunc(
network,
rpc,
`${CONTRACTS[network].aptos.core}::contract_upgrade`,
`${argv["contract-address"]}::contract_upgrade`,
"upgrade",
[],
[
@ -277,6 +281,14 @@ exports.builder = function(y: typeof yargs) {
})
.command("migrate", "Perform migration after contract upgrade", (_yargs) => {
return yargs
// TODO(csongor): once the sdk has the addresses, just look that up
// based on the module
.option("contract-address", {
alias: "a",
required: true,
describe: "Address where the wormhole module is deployed",
type: "string",
})
.option("network", network_options)
.option("rpc", rpc_description)
}, async (argv) => {
@ -288,7 +300,7 @@ exports.builder = function(y: typeof yargs) {
const hash = await callEntryFunc(
network,
rpc,
`${CONTRACTS[network].aptos.core}::contract_upgrade`,
`${argv["contract-address"]}::contract_upgrade`,
"migrate",
[],
[])

View File

@ -248,7 +248,8 @@
},
"22": {
"contracts": {
"tokenBridgeEmitterAddress": "0000000000000000000000000000000000000000000000000000000000000001"
"tokenBridgeEmitterAddress": "0000000000000000000000000000000000000000000000000000000000000001",
"nftBridgeEmitterAddress": "0000000000000000000000000000000000000000000000000000000000000002"
}
}
},

View File

@ -97,6 +97,7 @@ solNFTBridge=$(jq --raw-output '.chains."1".contracts.nftBridgeEmitterAddress' $
ethNFTBridge=$(jq --raw-output '.chains."2".contracts.nftBridgeEmitterAddress' $addressesJson)
terraNFTBridge=$(jq --raw-output '.chains."3".contracts.nftBridgeEmitterAddress' $addressesJson)
nearNFTBridge=$(jq --raw-output '.chains."15".contracts.nftBridgeEmitterAddress' $addressesJson)
aptosNFTBridge=$(jq --raw-output '.chains."22".contracts.nftBridgeEmitterAddress' $addressesJson)
# 4) create token bridge registration VAAs
# invoke CLI commands to create registration VAAs
@ -117,6 +118,7 @@ solNFTBridgeVAA=$(node ./clients/js/build/main.js generate registration -m NFTBr
ethNFTBridgeVAA=$(node ./clients/js/build/main.js generate registration -m NFTBridge -c ethereum -a ${ethNFTBridge} -g ${guardiansPrivateCSV})
terraNFTBridgeVAA=$(node ./clients/js/build/main.js generate registration -m NFTBridge -c terra -a ${terraNFTBridge} -g ${guardiansPrivateCSV})
nearNFTBridgeVAA=$(node ./clients/js/build/main.js generate registration -m NFTBridge -c near -a ${nearNFTBridge} -g ${guardiansPrivateCSV})
aptosNFTBridgeVAA=$(node ./clients/js/build/main.js generate registration -m NFTBridge -c aptos -a ${aptosNFTBridge} -g ${guardiansPrivateCSV})
# 6) write the registration VAAs to env files
@ -136,6 +138,7 @@ solNFTBridge="REGISTER_SOL_NFT_BRIDGE_VAA"
ethNFTBridge="REGISTER_ETH_NFT_BRIDGE_VAA"
terraNFTBridge="REGISTER_TERRA_NFT_BRIDGE_VAA"
nearNFTBridge="REGISTER_NEAR_NFT_BRIDGE_VAA"
aptosNFTBridge="REGISTER_APTOS_NFT_BRIDGE_VAA"
# solana token bridge
@ -178,6 +181,10 @@ upsert_env_file $envFile $terra2TokenBridge $terra2TokenBridgeVAA
upsert_env_file $ethFile $aptosTokenBridge $aptosTokenBridgeVAA
upsert_env_file $envFile $aptosTokenBridge $aptosTokenBridgeVAA
# aptos nft bridge
upsert_env_file $ethFile $aptosNFTBridge $aptosNFTBridgeVAA
upsert_env_file $envFile $aptosNFTBridge $aptosNFTBridgeVAA
# near token bridge
upsert_env_file $ethFile $nearTokenBridge $nearTokenBridgeVAA
upsert_env_file $envFile $nearTokenBridge $nearTokenBridgeVAA