diff --git a/icepick.toml b/icepick.toml deleted file mode 100644 index 25a36de..0000000 --- a/icepick.toml +++ /dev/null @@ -1,223 +0,0 @@ -[[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" } diff --git a/icepick.yaml b/icepick.yaml new file mode 100644 index 0000000..997e311 --- /dev/null +++ b/icepick.yaml @@ -0,0 +1,224 @@ +module: + - name: "sol" + derivation_prefix: "m/44'/501'/0'" + algorithm: "Ed25519" + workflow: + - name: "broadcast" + inputs: + - "nonce_address" + - "cluster" + step: + - type: "sol-get-nonce-account-data" + inputs: + nonce_address: "nonce_address" + cluster: "cluster" + outputs: + authority: "nonce_authority" + durable_nonce: "nonce" + - type: "internal-save-file" + values: + filename: "nonce.json" + inputs: + nonce_authority: "nonce_authority" + nonce_data: "nonce" + nonce_address: "nonce_address" + - type: "internal-load-file" + values: + filename: "transaction.json" + outputs: + transaction: "transaction" + - type: "sol-broadcast" + inputs: + cluster: "cluster" + transaction: "transaction" + outputs: + status: "status" + url: "url" + error: "error" + - name: "generate-nonce-account" + inputs: + - "cluster" + - "authorization_address" + step: + - type: "sol-generate-wallet" + - type: "sol-get-wallet-address" + outputs: + pubkey: "wallet_pubkey" + - type: "sol-await-funds" + inputs: + address: "wallet_pubkey" + cluster: "cluster" + values: + lamports: "1510000" + - type: "sol-get-blockhash" + inputs: + cluster: "cluster" + outputs: + blockhash: "blockhash" + - type: "sol-create-nonce-account-and-signing-key" + inputs: + from_address: "wallet_pubkey" + authorization_address: "authorization_address" + outputs: + transaction: "instructions" + nonce_pubkey: "nonce_pubkey" + nonce_privkey: "private_keys" + derivation_accounts: "derivation_accounts" + - type: "sol-compile" + inputs: + instructions: "instructions" + derivation_accounts: "derivation_accounts" + blockhash: "blockhash" + outputs: + transaction: "unsigned_transaction" + - type: "sol-sign" + inputs: + blockhash: "blockhash" + signing_keys: "private_keys" + transaction: "unsigned_transaction" + outputs: + transaction: "signed_transaction" + - type: "sol-broadcast" + inputs: + cluster: "cluster" + transaction: "signed_transaction" + outputs: + status: "status" + url: "url" + error: "error" + - 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" + - name: "transfer" + inputs: + - "to_address" + - "from_address" + - "amount" + step: + - type: "internal-load-file" + values: + filename: "nonce.json" + outputs: + nonce_authority: "nonce_authority" + nonce_data: "nonce_data" + nonce_address: "nonce_address" + - type: "sol-transfer" + inputs: + from_address: "from_address" + to_address: "to_address" + amount: "amount" + outputs: + instructions: "instructions" + derivation_accounts: "derivation_accounts" + - type: "sol-compile" + inputs: + instructions: "instructions" + derivation_accounts: "derivation_accounts" + nonce_address: "nonce_address" + nonce_authority: "nonce_authority" + nonce_data: "nonce_data" + outputs: + transaction: "unsigned_transaction" + - type: "sol-sign" + inputs: + blockhash: "nonce_data" + transaction: "unsigned_transaction" + outputs: + transaction: "signed_transaction" + - type: "internal-save-file" + values: + filename: "transaction.json" + inputs: + transaction: "signed_transaction" + - name: "cosmos" + derivation_prefix: "m/44'/118'/0'" + algorithm: "Secp256k1" + workflow: + - name: "transfer" + inputs: + - "from_address" + - "to_address" + - "asset_name" + - "chain_name" + - "asset_amount" + step: + - type: "cosmos-get-chain-info" + inputs: + chain_name: "chain_name" + outputs: + blockchain_config: "blockchain_config" + - type: "internal-load-file" + values: + filename: "account_info.json" + outputs: + account_number: "account_number" + sequence_number: "sequence_number" + - type: "cosmos-transfer" + inputs: + from_address: "from_address" + to_address: "to_address" + amount: "asset_amount" + denom: "asset_name" + blockchain_config: "blockchain_config" + outputs: + fee: "fee" + tx_messages: "tx_messages" + - type: "cosmos-sign" + inputs: + fee: "fee" + tx_messages: "tx_messages" + account_number: "account_number" + sequence_number: "sequence_number" + blockchain_config: "blockchain_config" + outputs: + transaction: "signed_transaction" + - type: "internal-save-file" + values: + filename: "transaction.json" + inputs: + transaction: "signed_transaction" + - name: "broadcast" + inputs: + - "nonce_address" + - "chain_name" + step: + - type: "cosmos-get-chain-info" + inputs: + chain_name: "chain_name" + outputs: + blockchain_config: "blockchain_config" + - type: "cosmos-get-account-data" + inputs: + account_id: "nonce_address" + blockchain_config: "blockchain_config" + outputs: + account_number: "account_number" + sequence_number: "sequence_number" + - type: "internal-save-file" + values: + filename: "account_info.json" + inputs: + account_number: "account_number" + sequence_number: "sequence_number" + - type: "internal-load-file" + values: + filename: "transaction.json" + outputs: + transaction: "transaction" + - type: "cosmos-broadcast" + inputs: + blockchain_config: "blockchain_config" + transaction: "transaction" + outputs: + status: "status" + url: "url" + error: "error" + error_code: "error_code"