@algodex/algodex-sdk-patch
Version:
API calls for interacting with the Algorand blockchain
85 lines (67 loc) • 3.2 kB
JavaScript
//
// USAGE:
// node scripts/sendMultiSig.js --in-file [in-file] --out-file [out-file] --send=[true|false] --mnemonic=[mnemonic] --first-address=[address] --second-address=[address]
const algosdk = require('algosdk');
const algodex = require('../index.js');
const fs = require('fs');
async function readSignedMultisigTransactionFromFile(account, firstAddress, secondAddress, stxn) {
// Setup the parameters for the multisig account
const mparams = {
version: 1,
threshold: 2,
addrs: [
firstAddress,
secondAddress,
],
};
let multsigaddr = algosdk.multisigAddress(mparams);
console.log("Multisig Address: " + multsigaddr);
let twosigs = algosdk.appendSignMultisigTransaction(stxn, mparams, account.sk).blob;
//sign with second account - this can be signed before writing twosigs offline or when reading in, if second tx not signed here just writting stxn
//let twosigs = algosdk.appendSignMultisigTransaction(stxn, mparams, account2.sk).blob;
const algodClient = algodex.initAlgodClient('production');
algodex.initIndexer('production');
let txId = (await algodClient.sendRawTransaction(twosigs).do());
let confirmedTxn = await algodex.waitForConfirmation(txId.txId);
console.log("Transaction " + txId.txId + " confirmed in round " + confirmedTxn["confirmed-round"]);
};
async function writeSignedMultisigTransactionToFile(account, firstAddress, secondAddress, txn, outFile='./signedmultisig.stxn') {
// Setup the parameters for the multisig account
const mparams = {
version: 1,
threshold: 2,
addrs: [
firstAddress,
secondAddress,
],
};
let multsigaddr = algosdk.multisigAddress(mparams);
console.log("Multisig Address: " + multsigaddr);
console.log(algosdk.encodeAddress(txn.from.publicKey))
let stxn = algosdk.signMultisigTransaction(txn, mparams, account.sk).blob;
fs.writeFileSync(outFile, stxn );
console.log("The stxn file was saved!");
// write out mparams as json file
let mparamsinfo = JSON.stringify(mparams, undefined, 2);
fs.writeFileSync('./multisigparams.json', mparamsinfo)
console.log("The multisig params file was saved!");
};
async function main() {
const args = require('minimist')(process.argv.slice(2))
const inFile = args['in-file'];
const outFile = args['out-file'];
const send = args['send'] === 'true';
const mnemonic = args['mnemonic'];
const firstAddress = args['first-address'];
const secondAddress = args['second-address'];
const account = algosdk.mnemonicToSecretKey(mnemonic);
if (!send) {
console.log('send is false so writing');
const txn = algosdk.decodeUnsignedTransaction(fs.readFileSync(inFile));
writeSignedMultisigTransactionToFile(account, firstAddress, secondAddress, txn, outFile);
} else {
const stxn = fs.readFileSync(inFile);
readSignedMultisigTransactionFromFile(account, firstAddress, secondAddress, stxn);
}
}
main();