OneChain Labs SDKs

Wallet functions

Here we can build asset transfer, transaction query, payment transaction, etc.

BuildSponsorTransaction

Construct any transaction, such as token transfer, contract call, etc.

const {SUI_TYPE_ARG: OCT} = require('@onelabs/sui/utils')
const {Transaction}       = require('@onelabs/sui/transactions');
const {Ed25519Keypair}    = require('@onelabs/sui/keypairs/ed25519');
const senderKeypair       = Ed25519Keypair.generate();
const receiverKeypair     = Ed25519Keypair.generate();
const Bcs                 = require('@onelabs/bcs');
 
let coinObjects = await provider.getCoins({
  owner:    senderKeypair.getPublicKey().toSuiAddress(),
  coinType: OCT
});
 
let coinObject = coinObjects.data[0].coinObjectId;
 
// New transferObjects transaction
let transaction = new Transaction();
transaction.transferObjects([transaction.object(coinObject)], transaction.pure.address(receiverKeypair.getPublicKey().toSuiAddress()));
 
let onlyTransactionKind = true;
const transactionBytes  = await transaction.build({
  client: provider,
  onlyTransactionKind
});
const rawTransaction    = Bcs.toB64(transactionBytes);
//Request one chain wallet append gas sponsor payment
let sponsorTransaction      = await connection.buildSponsorTransaction({
  address:   senderKeypair.getPublicKey().toSuiAddress(),
  gasBudget: '0.001',
  onlyTransactionKind,
  rawTransaction
});

SendSponsorTransaction

Send and execute sponsor transaction

//Use the sender private key to sign the transaction
let {signature} = await senderKeypair.signTransaction(Bcs.fromBase64(sponsorTransaction.rawTransaction));
 
//Request one chain wallet send signed tx
let transaction = await connection.sendSponsorTransaction({
  reservationId: sponsorTransaction.reservationId,
  txBytes:       sponsorTransaction.rawTransaction,
  userSig:       signature
});
// transaction.status=true.
// transaction.hash

BuildTransferTransaction

Use zklogin address to construct transfer transaction

let receiver = Ed25519Keypair.generate();
let transferTx = await connection.buildTransferTransaction({
    coinType:"0x2::oct::OCT",
    amount: 1,
    fromAddress: user.address,
    toAddress: receiver.getPublicKey().toSuiAddress()
});
//transferTx.hash
//transferTx.rawTransaction

SendTransferTransaction

Zklogin signs and broadcasts transfer transactions

const zk = require('@onelabs/sui/zklogin');
 
const zkSignTransaction = async (user, rawTransaction) => {
  let {signature: userSignature} = await Ed25519Keypair.fromSecretKey(user.zk.ephemeralKeyPair.secretKey).signTransaction(Bcs.fromB64(rawTransaction));
  return zk.getZkLoginSignature({
    inputs:   {
      ...user.zk.zkpoof,
      addressSeed: user.addressSeed
    },
    maxEpoch: user.zk.maxEpoch,
    userSignature
  });
};
 
// Zklogin sign
let zkLoginSignature = await zkSignTransaction(user, transferTx.rawTransaction);
 
// Send transaction
const result = await connection.sendTransferTransaction({
  hash:    transferTx.hash,
  txBytes: transferTx.rawTransaction,
  userSig: zkLoginSignature
});
assert(result.status === 'SUCCESS', 'Send transfer transaction should success.');
assert(result.hash === transferTx.hash, 'Send transfer transaction hash should be equal transferTx.hash');

On this page