Taquito is a little special in that it requires a signer to forge an operation. In fact, we only need the signer to return the wallet address and the encoded public key. We'll initialize a Taquito RPC instance using our fake signer and a local forger (see below). After forging the operation, we can distribute it via the Dfns TypeScript SDK.
import { RpcClient } from'@taquito/rpc'import { Signer, TezosToolkit } from'@taquito/taquito'import { LocalForger } from'@taquito/local-forging'import { Prefix, b58cencode, prefix } from'@taquito/utils'constwalletId='wa-6lbfv-9esgj-xxxxxxxxxxxxxxxx'constwallet=awaitdfnsClient.wallets.getWallet({ walletId })// Tezos requires a signer to forge a transaction. When forging, we only// need 'publicKeyHash' (address) and 'publicKey' (encoded)classTezosToolkitSignerimplementsSigner {sign():Promise<{ bytes:string sig:string prefixSig:string sbytes:string }> {thrownewError('Method not implemented.') }asyncpublicKey():Promise<string> {constprefix=wallet.signingKey.scheme ==='EdDSA'?Prefix.EDPK:Prefix.SPPKreturnb58cencode(wallet.signingKey.publicKey, prefix) }asyncpublicKeyHash():Promise<string> {returnwallet.address }secretKey():Promise<string|undefined> {thrownewError('Method not implemented.') }}constclient=newRpcClient('TEZOS_NODE_URL')constTezos=newTezosToolkit(client)constforger=newLocalForger()Tezos.setForgerProvider(forger)Tezos.setSignerProvider(newTezosToolkitSigner())constreceiver='tz1XKKrD4NLRhBK4PFxQ4XvH2KXZ6J389N1Z'// estimate feesconstestimate=awaitTezos.estimate.transfer({ source:wallet.address, to: receiver, amount:1,})constprepared=awaitTezos.prepare.transaction({ source:wallet.address, to: receiver, amount:1, fee:estimate.suggestedFeeMutez, gasLimit:estimate.gasLimit, storageLimit:estimate.storageLimit,})constforgeable=awaitTezos.prepare.toForge(prepared)constforgedBytes=awaitforger.forge(forgeable)constres=awaitdfnsClient.wallets.broadcastTransaction({ walletId, body: { kind:'Transaction', transaction:`0x${forgedBytes}`, },})
kind*
String
For Tezos, always Transaction
transaction*
Hex String
The unsigned hex encoded transaction as shown below
externalId
(Optional) String
A unique ID from your system. It can be leveraged to be used as an idempotency key (read more here)