kitle permite configurar opciones de transacción predeterminadas:
import { CeloContract } from "@celo/contractkit";
let accounts = await kit.web3.eth.getAccounts();
kit.defaultAccount = accounts[0];
// paid gas in cUSD
await kit.setFeeCurrency(CeloContract.StableToken);
Configurado feeCurrencypara una transacción
Puede configurar feeCurrencypara cada transacción individualmente configurando el feeCurrencycampo en el .send()método. El feeCurrencycampo acepta direcciones de contrato de monedas de tarifa incluidas en la lista blanca.
let cUSDcontract = await kit.contracts.getStableToken();
let cUSDtx = await cUSDcontract
.transfer(someAddress, amount)
.send({ feeCurrency: cUSDcontract.address });
Obtener el saldo
Este método kitdevolverá el CELO, el CELO bloqueado, el cUSD y el saldo total de la dirección.
let totalBalance = await kit.getTotalBalance(myAddress);
Implementar un contrato
Implementar un contrato con la cuenta predeterminada ya configurada. Simplemente envíe una transacción sin to:campo. Vea más sobre el envío de transacciones personalizadas a continuación.
let bytecode = "0x608060405234..."; // compiled Solidity deployment bytecode
let tx = await kit.sendTransaction({
data: bytecode,
});
let receipt = tx.waitReceipt();
console.log(receipt);
Envío de transacciones
El objeto de transacción de Celo no es el mismo que el de Ethereum. Hay un nuevo campo opcional presente:
feeCurrency(dirección del contrato ERC20 a utilizar para pagar el gas)
feeCurrencypermite pagar las tarifas de transacción en monedas distintas a CELO. Las monedas de tarifa admitidas actualmente son CELO, cUSD y cEUR. Puede especificar la moneda pasando la dirección del contrato de la moneda en la que desea que se paguen las tarifas de transacción.
let cUSDcontract = await kit.contracts.getStableToken();
let contract = new kit.connection.web3.eth.Contract(ABI, address); // Init a web3.js contract instance
let name = await instance.methods.getName().call(); // Read contract state
// Specifying the 'from' account and 'feeCurrency' is optional
// Transactions with an unspecified feeCurrency field will default to paying fees in CELO
const tx = await instance.methods
.setName(newName)
.send({ from: account.address, feeCurrency: cUSDcontract.address });
Vender CELO sólo si la tasa es favorable
// This is at lower price I will accept in cUSD for every CELO
const favorableAmount = 100;
const amountToExchange = kit.web3.utils.toWei("10", "ether");
const oneGold = kit.web3.utils.toWei("1", "ether");
const exchange = await kit.contracts.getExchange();
const amountOfcUsd = await exchange.quoteGoldSell(oneGold);
if (amountOfcUsd > favorableAmount) {
const goldToken = await kit.contracts.getGoldToken();
const approveTx = await goldToken
.approve(exchange.address, amountToExchange)
.send();
const approveReceipt = await approveTx.waitReceipt();
const usdAmount = await exchange.quoteGoldSell(amountToExchange);
const sellTx = await exchange.sellGold(amountToExchange, usdAmount).send();
const sellReceipt = await sellTx.waitReceipt();
}
Comprando todos los CELO que puedo, con los cUSD en mi cuenta
Puede verificar la implementación en el . Espere el recibo y regístrelo para obtener los detalles de la transacción.
Celo también acepta transacciones originales de tipo Ethereum, por lo que puede utilizar herramientas de firma de Ethereum (como Metamask), así como carteras y herramientas específicas de Celo. Puede leer más sobre estos formatos de transacciones en .
Puede utilizar ContractKit para interactuar con cualquier contrato inteligente implementado, siempre que tenga la dirección del contrato y la . Para hacerlo, inicializará una nueva web3instancia de Contrato. Luego puede llamar funciones en la instancia del contrato para leer el estado o enviar transacciones para actualizar el contrato. Puede ver algunos fragmentos de código a continuación. Para obtener un ejemplo más completo, consulte la sección del ejemplo de código Implementar un contrato.