Ich habe einen Vertrag in meinem testrpc-Netzwerk bereitgestellt.
$ 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...
Wie erhalte ich die Adresse für die Funktion contribute
(aus dem Beispielcode für https://dappsforbeginners.wordpress.com/tutorials/contracts-that-send-transactions/ ), die so aussieht:
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;
}
Ich nehme an, ich muss die Funktionsadresse abrufen und diese dann als Parameter im MetaMask-Sendedialog unter angeben transaction data
. Ich kann die eth als Betrag senden, richtig? Dann werden msg.value
und msg.sender
als Kontext für den Anruf bereitgestellt.
Ich nehme an, ich muss die Funktionsadresse abrufen und diese dann als Parameter im MetaMask-Sendedialog unter angeben
transaction data
. Ich kann die eth als Betrag senden, richtig?
Ja.
Um die Methoden-ID zu erhalten (siehe Was ist eine ABI und warum wird sie für die Interaktion mit Verträgen benötigt? ), müssen Sie kanonische Typen verwenden und sie dann mit Keccak-256 hashen und die ersten 4 Bytes nehmen.
Für contribute(uint)
müssen Sie verwenden contribute(uint256)
.
Geben Sie contribute(uint256)
ein Tool wie https://emn178.github.io/online-tools/keccak_256.html ein
Du wirst kriegenc1cbbca71c96db867642d5aeca3697d2e3bd24b386562e2b7004d1b0f4fbaaed
Die ersten 4 Bytes (8 Hex-Zeichen) sind c1cbbca7
.
0xc1cbbca7
Sie können dies anhand von https://www.4byte.directory überprüfen
ID text signature bytes signature
3752 contribute(uint256) 0xc1cbbca7
0xc1cbbca7
ist das, was Sie in die Transaktionsdaten von MetaMask eingeben , ABER Sie müssen den uint256-Parameter noch in codieren contribute
.
Beispiele finden Sie unter https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI#examples .
Die manuelle Kodierung für die ABI kann schwierig und fehleranfällig sein. Möglicherweise rufen Sie die falsche Funktion im Vertrag auf oder senden Ihre ETH an eine Funktion, die Ihnen nicht das gibt, wonach Sie suchen. Seien Sie vorsichtig und überprüfen Sie immer, ob Sie dies tun müssen. In diesem Beispiel könnten Sie einen Fehler bei der Codierung der Kampagnen-ID machen und am Ende ETH an die falsche Kampagne senden (und möglicherweise verlieren).