[[module]] name = "sol" derivation_prefix = "m/44'/501'/0'" algorithm = "Ed25519" # NOTE: To get a nonce address, the `generate-nonce-account` workflow should be # run. It is the only workflow that uses a blockhash, which is why a # `broadcast-with-blockhash` or similar is not, and should not be, implemented. [[module.workflow]] name = "broadcast" inputs = ["nonce_address", "cluster"] [[module.workflow.step]] type = "sol-get-nonce-account-data" inputs = { nonce_address = "nonce_address", cluster = "cluster" } outputs = { authority = "nonce_authority", durable_nonce = "nonce" } [[module.workflow.step]] type = "internal-save-file" values = { filename = "nonce.json" } inputs = { nonce_authority = "nonce_authority", nonce_data = "nonce", nonce_address = "nonce_address" } [[module.workflow.step]] type = "internal-load-file" values = { filename = "transaction.json" } outputs = { transaction = "transaction" } [[module.workflow.step]] type = "sol-broadcast" inputs = { cluster = "cluster", transaction = "transaction" } outputs = { status = "status", url = "url", error = "error" } [[module.workflow]] name = "generate-nonce-account" inputs = ["cluster", "authorization_address"] [[module.workflow.step]] type = "sol-generate-wallet" [[module.workflow.step]] type = "sol-get-wallet-address" outputs = { pubkey = "wallet_pubkey" } [[module.workflow.step]] type = "sol-await-funds" inputs = { address = "wallet_pubkey", cluster = "cluster" } # enough to cover two signatures and the 1_500_000 approx. rent fee values = { lamports = "1510000" } [[module.workflow.step]] type = "sol-get-blockhash" inputs = { cluster = "cluster" } outputs = { blockhash = "blockhash" } [[module.workflow.step]] type = "sol-create-nonce-account-and-signing-key" [module.workflow.step.inputs] from_address = "wallet_pubkey" authorization_address = "authorization_address" [module.workflow.step.outputs] transaction = "instructions" nonce_pubkey = "nonce_pubkey" nonce_privkey = "private_keys" derivation_accounts = "derivation_accounts" [[module.workflow.step]] type = "sol-compile" [module.workflow.step.inputs] instructions = "instructions" derivation_accounts = "derivation_accounts" blockhash = "blockhash" [module.workflow.step.outputs] transaction = "unsigned_transaction" [[module.workflow.step]] type = "sol-sign" [module.workflow.step.inputs] blockhash = "blockhash" signing_keys = "private_keys" transaction = "unsigned_transaction" [module.workflow.step.outputs] transaction = "signed_transaction" [[module.workflow.step]] type = "sol-broadcast" inputs = { cluster = "cluster", transaction = "signed_transaction" } outputs = { status = "status", url = "url", error = "error" } [[module.workflow.step]] type = "internal-cat" inputs = { status = "status", url = "url", nonce_account = "nonce_pubkey", error = "error" } outputs = { status = "status", url = "url", nonce_account = "nonce_account", error = "error" } [[module.workflow]] # Transfer SOL from one address to another. name = "transfer" inputs = ["to_address", "from_address", "amount"] [[module.workflow.step]] type = "internal-load-file" values = { filename = "nonce.json" } outputs = { nonce_authority = "nonce_authority", nonce_data = "nonce_data", nonce_address = "nonce_address" } [[module.workflow.step]] type = "sol-transfer" inputs = { from_address = "from_address", to_address = "to_address", amount = "amount" } outputs = { instructions = "instructions", derivation_accounts = "derivation_accounts" } [[module.workflow.step]] type = "sol-compile" [module.workflow.step.inputs] instructions = "instructions" derivation_accounts = "derivation_accounts" nonce_address = "nonce_address" nonce_authority = "nonce_authority" nonce_data = "nonce_data" [module.workflow.step.outputs] transaction = "unsigned_transaction" [[module.workflow.step]] type = "sol-sign" inputs = { blockhash = "nonce_data", transaction = "unsigned_transaction" } outputs = { transaction = "signed_transaction" } [[module.workflow.step]] type = "internal-save-file" values = { filename = "transaction.json" } inputs = { transaction = "signed_transaction" } [[module]] name = "cosmos" derivation_prefix = "m/44'/118'/0'" algorithm = "Secp256k1" [[module.workflow]] name = "transfer" inputs = ["from_address", "to_address", "asset_name", "chain_name", "asset_amount"] [[module.workflow.step]] # NOTE: chain_name can't be discoverable by filtering from asset_name, since # some asset devnets reuse the name. There's no difference between KYVE on Kyve # or Korellia (devnet). type = "cosmos-get-chain-info" inputs = { chain_name = "chain_name" } outputs = { blockchain_config = "blockchain_config" } [[module.workflow.step]] type = "internal-load-file" values = { filename = "account_info.json" } outputs = { account_number = "account_number", sequence_number = "sequence_number" } [[module.workflow.step]] type = "cosmos-transfer" [module.workflow.step.inputs] from_address = "from_address" to_address = "to_address" amount = "asset_amount" denom = "asset_name" blockchain_config = "blockchain_config" [module.workflow.step.outputs] fee = "fee" tx_messages = "tx_messages" [[module.workflow.step]] type = "cosmos-sign" [module.workflow.step.inputs] fee = "fee" tx_messages = "tx_messages" account_number = "account_number" sequence_number = "sequence_number" blockchain_config = "blockchain_config" [module.workflow.step.outputs] transaction = "signed_transaction" [[module.workflow.step]] type = "internal-save-file" values = { filename = "transaction.json" } inputs = { transaction = "signed_transaction" } [[module.workflow]] name = "broadcast" # NOTE: For the purpose of Cosmos, the nonce is a direct part of the signer's # account. inputs = ["nonce_address", "chain_name"] [[module.workflow.step]] type = "cosmos-get-chain-info" inputs = { chain_name = "chain_name" } outputs = { blockchain_config = "blockchain_config" } [[module.workflow.step]] type = "cosmos-get-account-data" inputs = { account_id = "nonce_address", blockchain_config = "blockchain_config" } outputs = { account_number = "account_number", sequence_number = "sequence_number" } [[module.workflow.step]] type = "internal-save-file" values = { filename = "account_info.json" } inputs = { account_number = "account_number", sequence_number = "sequence_number" } [[module.workflow.step]] type = "internal-load-file" values = { filename = "transaction.json" } outputs = { transaction = "transaction" } [[module.workflow.step]] type = "cosmos-broadcast" inputs = { blockchain_config = "blockchain_config", transaction = "transaction" } outputs = { status = "status", url = "url", error = "error", error_code = "error_code" }