Use the task-based deployment commands:
# Update .env for TESTNET environment
# export DEPLOY_ENV=TESTNET
# Full deployment pipeline
task deploy:full
# deploy just the components -> wa.dev
bash script/upload-components-background.sh
# Upload service config to IPFS
task deploy:ipfs
# Deploy service
task deploy:serviceecho "COMPLETED" > .docker/component-upload-status
# TESTNET
export WAVS_SERVICE_MANAGER_ADDRESS=`task config:service-manager-address`
export RPC_URL=`task get-rpc`
export INDEXER_ADDRESS=$(jq -r '.wavs_indexer' .docker/deployment_summary.json)
export EAS_ADDRESS=$(jq -r '.eas.contracts.eas' .docker/deployment_summary.json)
export VOUCHING_SCHEMA_UID=$(jq -r '.eas.schemas.vouching.uid' .docker/deployment_summary.json)
export TRIGGER_CHAIN=evm:$(task get-chain-id)
export SUBMIT_CHAIN=evm:$(task get-chain-id)
export REGISTRY=$(task get-registry)
export AGGREGATOR_URL=http://127.0.0.1:8040
export CHAIN_NAME=evm:$(task get-chain-id)
export AGGREGATOR_TIMER_DELAYER_SECS=3
# build service.json
bash ./script/build-service.sh
# Update IPFS service
export PINATA_API_KEY=$(grep ^WAVS_ENV_PINATA_API_KEY= .env | cut -d '=' -f2-)
export ipfs_cid=`task deploy:ipfs`
cast send `task config:service-manager-address` 'setServiceURI(string)' "ipfs://${ipfs_cid}" -r `task get-rpc` --private-key `task config:funded-key`
cast call ${WAVS_SERVICE_MANAGER_ADDRESS} "getServiceURI()(string)" --rpc-url ${RPC_URL}
# ----
(cd infra/wavs-1; sh start.sh)
(cd infra/aggregator-1; sh start.sh)
# Use task deploy:service instead
# ! If you get 0x3dda1739 in the aggregator, make sure to run this (there is no operator)
export op_num=2
export op_priv_key=$(grep ^WAVS_CLI_EVM_CREDENTIAL= infra/wavs-$op_num/.env | cut -d '=' -f2- | tr -d '"')
export op_mnemonic=$(grep ^WAVS_SUBMISSION_MNEMONIC= infra/wavs-$op_num/.env | cut -d '=' -f2- | tr -d '"')
export op_addr=$(cast wallet address --private-key $op_priv_key) && echo $op_addr
export op_signing_key=$(cast wallet address --mnemonic "$op_mnemonic" --mnemonic-index 1) && echo $op_signing_key
cast send --rpc-url `task get-rpc` $WAVS_SERVICE_MANAGER_ADDRESS "registerOperator(address,uint256)" "${op_addr}" 1000 --private-key `task config:funded-key`
# cast send ${op_addr} --value 0.001ether -r `task get-rpc` --private-key `task config:funded-key` # if you forgot to fund
# the operator must sign they own their signing key to prove they own it
encoded_operator_address=$(cast abi-encode "f(address)" "$op_addr")
signing_message=$(cast keccak "$encoded_operator_address")
signing_signature=$(cast wallet sign --no-hash --mnemonic "$op_mnemonic" --mnemonic-index 1 "$signing_message")
echo "Signing signature: $signing_signature"
# NOTE: if `Out of gas: gas required exceeds allowance: 0`, give funds to op_addr
cast send $WAVS_SERVICE_MANAGER_ADDRESS "updateOperatorSigningKey(address,bytes)" "${op_signing_key}" "${signing_signature}" --rpc-url `task get-rpc` --private-key $op_priv_key
# cast call $WAVS_SERVICE_MANAGER_ADDRESS "getOperatorWeight(address)(uint256)" ${op_addr} --rpc-url `task get-rpc`
# ----
WAVS_SERVICE_MANAGER_ADDRESS=`task config:service-manager-address`
AGGREGATOR_URL=http://127.0.0.1:8040
CHAIN_NAME="evm:`task get-chain-id`"
curl -s -X POST -H "Content-Type: application/json" -d "{
\"service_manager\": {
\"evm\": {
\"chain\": \"${CHAIN_NAME}\",
\"address\": \"${WAVS_SERVICE_MANAGER_ADDRESS}\"
}
}
}" ${AGGREGATOR_URL}/services