aiken/examples/hello_world/lock.ts

40 lines
1.2 KiB
TypeScript

import { Asset, deserializeAddress, mConStr0 } from "@meshsdk/core";
import { getScript, getTxBuilder, wallet } from "./common";
async function main() {
// these are the assets we want to lock into the contract
const assets: Asset[] = [
{
unit: "lovelace",
quantity: "1000000",
},
];
// get utxo and wallet address
const utxos = await wallet.getUtxos();
const walletAddress = (await wallet.getUsedAddresses())[0];
const { scriptAddr } = getScript();
// hash of the public key of the wallet, to be used in the datum
const signerHash = deserializeAddress(walletAddress).pubKeyHash;
// build transaction with MeshTxBuilder
const txBuilder = getTxBuilder();
await txBuilder
.txOut(scriptAddr, assets) // send assets to the script address
.txOutDatumHashValue(mConStr0([signerHash])) // provide the datum where `"constructor": 0`
.changeAddress(walletAddress) // send change back to the wallet address
.selectUtxosFrom(utxos)
.setNetwork('preprod')
.complete();
const unsignedTx = txBuilder.txHex;
const signedTx = await wallet.signTx(unsignedTx);
const txHash = await wallet.submitTx(signedTx);
console.log(`1 tADA locked into the contract at Tx ID: ${txHash}`);
}
main();