Kaspa兑换脚本示例
作者:未知 来源:kastop.com 发布时间:2024年09月04日 点击数:
The redeem script
// @ts-ignore
globalThis.WebSocket = require("websocket").w3cwebsocket;
const fs = require('fs');
const {
PrivateKey,
Resolver,
RpcClient,
kaspaToSompi,
createTransactions,
initConsolePanicHook,
addressFromScriptPublicKey,
Address,
Opcodes,
ScriptBuilder
} = require('../../../../nodejs/kaspa');
const destinationAddressArg = 'kaspatest:qqff55t6ay54a5940jvzq2ylq8qnkazlffjqshlt70znhp48drslx9yunu0um';
const networkId = 'testnet-10';
initConsolePanicHook();
function createTimeLockedScript(lockTime) {
const builder = new ScriptBuilder();
return builder
.addI64(BigInt(lockTime))
.addOp(Opcodes.OpCheckLockTimeVerify)
.addOp(Opcodes.OpDrop)
.addOp(Opcodes.OpCheckSig) // This will be used for the sender's signature
.createPayToScriptHashScript(); // This will not be used to create a new address
}
(async () => {
const privateKey = new PrivateKey('af0aa5ddcc93ab2d60986db7cb88cae95f52b142c13d33b4d616c70106f110d4');
const sourceAddress = privateKey.toKeypair().toAddress(networkId);
console.info(`Source address: ${sourceAddress}`);
const destinationAddress = new Address(destinationAddressArg);
console.log(`Destination address: ${destinationAddress}`);
const rpc = new RpcClient({
resolver: new Resolver(),
networkId
});
console.log(`Connecting to ${rpc.url}`);
await rpc.connect();
let { isSynced } = await rpc.getServerInfo();
if (!isSynced) {
console.error("Please wait for the node to sync");
rpc.disconnect();
return;
}
let { entries } = (await rpc.getUtxosByAddresses([sourceAddress]));
if (!entries.length) {
console.error("No UTXOs found for address");
} else {
console.info(entries);
entries.sort((a, b) => a.amount > b.amount ? 1 : -1);
const oneHourInSeconds = 60 * 2;
const currentUnixTime = Math.floor(Date.now() / 1000);
const lockTime = currentUnixTime + oneHourInSeconds;
const timeLockedScript = createTimeLockedScript(lockTime);
console.log(`Time-locked script: ${timeLockedScript.toString('hex')}`);
fs.writeFileSync('timeLockedScript.json', JSON.stringify(timeLockedScript));
// Create a P2SH address from the time-locked script
const P2SHAddress = addressFromScriptPublicKey(timeLockedScript, networkId);
console.log(`P2SH Address: ${P2SHAddress.toString()}`);
// Use the P2SH address in the transaction outputs
let { transactions, summary } = await createTransactions({
entries,
outputs: [{
address: P2SHAddress.toString(), // Use the P2SH address here
amount: kaspaToSompi("10") // Adjust the amount as needed
}],
priorityFee: 0n,
changeAddress: sourceAddress,
networkId: networkId
});
console.log("Summary:", summary);
for (let pending of transactions) {
// Sign the transaction
await pending.sign([privateKey]);
// Get the signature from the signed input
const signature = pending.sign([privateKey]); // Assuming single input, adjust if multiple
console.log(signature)
// Set the lockTime on the transaction
pending.transaction.lockTime = BigInt(lockTime);
let txid = await pending.submit(rpc);
console.log("Node responded with txid:", txid);
}
}
await rpc.disconnect();
})();
| 感动 | 同情 | 无聊 | 愤怒 | 搞笑 | 难过 | 高兴 | 路过 |
- 上一篇:矿霸resistant分析
- 下一篇:Kaspa上线发布版本0.15.1-rc3
相关文章
-
没有相关内容

会员登录