import { Ecanna, BN } from "ecanna/dist" import { StakeVMAPI, KeyChain as StakeVMKeyChain } from "ecanna/dist/apis/stakevm" import { EVMAPI, KeyChain as EVMKeyChain, UnsignedTx, Tx, UTXOSet } from "ecanna/dist/apis/evm" import { PrivateKeyPrefix, DefaultLocalGenesisPrivateKey, Defaults, costImportTx } from "ecanna/dist/utils" const ip: string = "localhost" const port: number = 9650 const protocol: string = "http" const networkID: number = 1337 const ecanna: Ecanna = new Ecanna(ip, port, protocol, networkID) const stkchain: StakeVMAPI = ecanna.STKChain() const evmchain: EVMAPI = ecanna.EVMChain() const pKeychain: StakeVMKeyChain = stkchain.keyChain() const cHexAddress: string = "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC" const privKey: string = `${PrivateKeyPrefix}${DefaultLocalGenesisPrivateKey}` const cKeychain: EVMKeyChain = evmchain.keyChain() pKeychain.importKey(privKey) cKeychain.importKey(privKey) const cAddressStrings: string[] = evmchain.keyChain().getAddressStrings() const stkChainBlockchainId: string = Defaults.network[networkID].STK.blockchainID const main = async (): Promise => { const baseFeeResponse: string = await evmchain.getBaseFee() const baseFee = new BN(parseInt(baseFeeResponse, 16) / 1e9) let fee: BN = baseFee const evmUTXOResponse: any = await evmchain.getUTXOs( cAddressStrings, stkChainBlockchainId ) const utxoSet: UTXOSet = evmUTXOResponse.utxos let unsignedTx: UnsignedTx = await evmchain.buildImportTx( utxoSet, cHexAddress, cAddressStrings, stkChainBlockchainId, cAddressStrings, fee ) const importCost: number = costImportTx(unsignedTx) fee = baseFee.mul(new BN(importCost)) unsignedTx = await evmchain.buildImportTx( utxoSet, cHexAddress, cAddressStrings, stkChainBlockchainId, cAddressStrings, fee ) const tx: Tx = unsignedTx.sign(cKeychain) const txid: string = await evmchain.issueTx(tx) console.log(`Success! TXID: ${txid}`) } main()