import { parseEther } from "ethers"
import { EVM } from "@kynesyslabs/demosdk/xm-websdk"
import { prepareXMScript, prepareXMPayload, Demos } from "@kynesyslabs/demosdk/websdk"
// Initialize EVM instance and Demos
const instance = new EVM(chainProviders.eth.sepolia)
const demos = new Demos()
// Connect wallet and Demos
await instance.connect()
await instance.connectWallet(evmPrivateKey)
await demos.connect(rpc)
await demos.connectWallet(mnemonic)
// ERC20 ABI for transfer function
const erc20ABI = [
{
constant: false,
inputs: [
{ name: "dst", type: "address" },
{ name: "wad", type: "uint256" },
],
name: "transfer",
outputs: [{ name: "", type: "bool" }],
payable: false,
stateMutability: "nonpayable",
type: "function",
},
]
// Get contract instance
const tokenAddress = "0x1234567890123456789012345678901234567890"
const contract = await instance.getContractInstance(tokenAddress, JSON.stringify(erc20ABI))
// Prepare transfer
const recipient = "0xa2f64eec3E69C0B2E9978AB371A16eaA3a1Cf793"
const amount = parseEther("1.0")
// Sign transaction
const signedTx = await instance.writeToContract(contract, "transfer", [recipient, amount])
// Prepare XM script
const xmscript = prepareXMScript({
chain: "eth",
signedPayloads: [signedTx],
subchain: "sepolia",
type: "contract_write",
is_evm: true,
})
// Execute through Demos Network
const signedDemosTx = await prepareXMPayload(xmscript, demos)
const validityData = await demos.confirm(signedDemosTx)
const result = await demos.broadcast(validityData)