Implementé un contrato en mi red testrpc.
$ truffle deploy
Using network 'development'.
Running migration: 1_initial_migration.js
Deploying Migrations...
Migrations: 0x9ec9e7fedb27068a70aedf453012bbced070d1e0
Saving successful migration to network...
Saving artifacts...
Running migration: 2_deploy_contracts.js
Deploying CrowdFunding...
CrowdFunding: 0x61a235a21078920353dbb719e7c1e6bd8c8e182b
Saving successful migration to network...
Saving artifacts...
¿Cómo obtengo la dirección de la función contribute
(del código de ejemplo para https://dappsforbeginners.wordpress.com/tutorials/contracts-that-send-transactions/ ) que se ve así:
function contribute(uint campaignID) {
Campaign c = campaigns[campaignID];
Funder f = c.funders[c.numFunders++];
f.addr = msg.sender;
f.amount = msg.value;
c.amount += f.amount;
}
Supongo que necesito obtener la dirección de la función y luego proporcionarla como parámetro dentro del cuadro de diálogo de envío de MetaMask en transaction data
. Puedo enviar el eth como la cantidad, ¿correcto? Luego, msg.value
y msg.sender
se proporcionan como contexto para la llamada.
Supongo que necesito obtener la dirección de la función y luego proporcionarla como parámetro dentro del cuadro de diálogo de envío de MetaMask en
transaction data
. Puedo enviar el eth como la cantidad, ¿correcto?
Sí.
Para obtener el ID del método (consulte ¿Qué es un ABI y por qué es necesario para interactuar con los contratos? ), debe usar tipos canónicos y luego codificarlo con Keccak-256 y tomar los primeros 4 bytes.
Para contribute(uint)
, necesitas usar contribute(uint256)
.
Ingrese contribute(uint256)
a una herramienta como https://emn178.github.io/online-tools/keccak_256.html
Obtendrásc1cbbca71c96db867642d5aeca3697d2e3bd24b386562e2b7004d1b0f4fbaaed
Los primeros 4 bytes (8 caracteres hexadecimales) son c1cbbca7
.
Puede verificar dos veces 0xc1cbbca7
por https://www.4byte.directory
ID text signature bytes signature
3752 contribute(uint256) 0xc1cbbca7
0xc1cbbca7
es lo que ingresa en los datos de transacción de MetaMask PERO aún necesita codificar el parámetro uint256 en contribute
.
Consulte https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#examples para ver ejemplos.
La codificación manual para la ABI puede ser complicada y propensa a errores. Puede terminar llamando a la función incorrecta en el contrato o enviar su ETH a una función que no le dará lo que está buscando. Tenga cuidado y siempre verifique dos veces si necesita hacer esto. En este ejemplo, podría cometer un error al codificar el ID de la campaña y terminar enviando (y posiblemente perdiendo) ETH a la campaña equivocada.