Smart Contracts
Crear un objeto Contract
para un contrato ya desplegado es bastante sencillo.
Aunque no es estrictamente necesario, se recomienda encarecidamente proporcionar el ABI del contrato como una cadena al crear un objeto contract. Si no lo hace, no podrá aprovechar completamente nuestra codificación y decodificación ABI. Si decide seguir este camino, deberá proporcionar la firma completa de la función (nombre de la función + tipos de parámetros entre paréntesis - por ejemplo, transfer(address,uint256) para el método transfer de ERC20) al llamar a una función o consultar el contrato, y solo recibirá una cadena como respuesta a las consultas.
Llamar funciones de Smart Contract
Para llamar a un smart contract, usará el método CallFunction
para crear un objeto CallContractFunction
, que determinará el gasPrice, gasLimit, nonce y data apropiados para incluir en un nuevo EthTransaction
al proporcionarle un cliente y un objeto ContractCall
al método Create
async Task
Un ejemplo de cómo llamar a un smart contract sería el siguiente:
Nota: si no desea esperar el recibo, puede usar SendTransactionMethod
en su lugar.
Alternativamente, si solo quiere crear el EthTransaction
y enviarlo más tarde, puede usar directamente el objeto CallContractFunction
de CallFunction
.
Notará que el método CallFunction
acepta un número arbitrario de argumentos. Debe proporcionar los argumentos en el orden en que aparecen en el ABI/firma de la función.
Comprendiendo los mapeos de tipos de datos
Al interactuar con smart contracts, es importante entender cómo los tipos de datos de EVM se mapean a los tipos de datos de C# en la librería SequenceEthereum.
Por ejemplo, si proporciona una cadena donde el ABI espera un entero, recibirá una excepción, incluso si esa cadena podría convertirse en un entero.
Address
En C# puede usar un tipo string
o crear una instancia de Address
. Asegúrese de que su cadena sea hexadecimal,
comience con 0x
y tenga una longitud fija de 42 caracteres.
Enteros
Para tipos de enteros como int256
, uint8
o uint256
use el tipo BigInteger
de System.Numerics.
Bytes
Para definir tipos de datos byte de Solidity en C#, tiene la opción de crear un FixedByte
para tipos como byte16
o byte32
.
Cuando su contrato requiera bytes
, puede convertir cualquier valor en un byte[]
de cualquier longitud.
Si sus datos están representados como una cadena hexadecimal en C#, asegúrese de usar nuestra función HexStringToByteArray()
para convertir
el valor hexadecimal de vuelta al arreglo de bytes original.
Para arreglos de bytes como byte32[]
, simplemente cree un FixedByte[]
en C#.
Structs
Use Tuples para llamar una función on-chain con un struct. Aquí hay un ejemplo de un struct en Solidity y cómo definirlo
usando el SDK de Unity de Sequence y pasarlo como argumento en una función Contract.CallFunction
.
Struct de Solidity
Equivalente en C#
Otros tipos
Para tipos de datos tradicionales en Solidity como string
o bool
, puede usar los mismos tipos de datos en C#.
Consultar contratos
Para consultar un smart contract (leer datos), use el método SendQuery<T>
para consultar el contrato y devolver el resultado como tipo T (si es posible).
Un ejemplo de cómo consultar un smart contract sería:
Alternativamente, si desea simplemente construir la consulta y enviarla más tarde, puede usar QueryContract<T>
para crear un delegado.
Desplegar contratos
Si desea desplegar un contrato, puede usar el ContractDeployer