Ich habe Code, um Ether wie folgt an eine Adresse zu übertragen:
addr.transfer(amount);
Wenn ich diese Anweisung für zwei Überweisungen ausführe, kommt das Geld leider nie an den addr
Adressen an. Ich sehe die Etherscan-Ausgabe auf Ropsten:
Ich habe den Verdacht, dass die Überweisungen (call_1_0 und call_1_1 unten) nie ausgeführt werden, weil das GasLimit auf 2300 eingestellt ist. Ist das möglich?
Gibt es eine Möglichkeit das GasLimit zu erhöhen? Ich habe versucht mit:
uint GAS_LIMIT = 4000000;
addr.transfer.gas(GAS_LIMIT)(amount);
aber dann solc
sagt der Compiler:
TypeError: Member „gas“ nicht gefunden oder nicht sichtbar nach argumentabhängiger Suche in Funktion (uint256)
addr.transfer.gas(GAS_LIMIT)(amount);
^---------------^
Dies ist der vollständige Code des Vertrags (Begünstigte werden während der Erstellung durch einen „Manager“-Vertrag hinzugefügt, der ihn instanziiert.
contract SimpleSmartAsset is Mortal {
uint usagePrice;
Beneficiary[] beneficiaries;
uint totalWeight; // to calculate percentage the beneficiaries receive
event AssetCreated(uint _usagePrice,
address[] addresses,
uint[] weights);
function SimpleSmartAsset(uint _usagePrice,
address[] addresses,
uint[] weights) {
owner = msg.sender;
usagePrice = _usagePrice;
uint beneficiaryCount = addresses.length;
for (uint i = 0; i < beneficiaryCount; i++) {
uint weight = weights[i];
addBeneficiary(addresses[i], weight);
totalWeight += weight;
}
AssetCreated(_usagePrice, addresses, weights);
}
function getUsagePrice() constant returns (uint) {
return usagePrice;
}
event BeneficiaryPaid(address addr, uint amount);
function pay() payable onlyOwner {
require(msg.value >= usagePrice);
uint beneficiaryCount = beneficiaries.length;
for (uint i = 0; i < beneficiaryCount; i++) {
Beneficiary memory beneficiary = beneficiaries[i];
uint weight = beneficiary.weight;
address addr = beneficiary.addr;
uint amount = (weight * usagePrice) / totalWeight;
uint GAS_LIMIT = 4000000;
addr.transfer.gas(GAS_LIMIT)(amount);
BeneficiaryPaid(addr, amount);
}
}
struct Beneficiary {
address addr;
uint weight;
}
function addBeneficiary(address addr, uint weight) onlyOwner {
beneficiaries.push(Beneficiary({
addr: addr,
weight: weight
}));
}
}
Wie kann ich Geld an die Benutzeradressen aus dem Vertrag überweisen?
Betrachten Sie Ihre Transaktion 0xdd6c0059b330dc ... beide Übertragungen wurden korrekt durchgeführt.
Zum Beispiel ist die zweite Übertragung an die Adresse 0xbc965738eabb38... , Sie sollten sich die Registerkarte "Interne Transaktion" ansehen, dort gibt es eine Zeile, in der "Parent Hash" steht 0xdd6c0059b330dc...
und der Block 1287872
für einen Betrag von 0,05402... Ether steht.
Normalerweise werden „interne Transaktionen“ von den meisten Wallets nicht verfolgt, da jede Transaktion verarbeitet werden muss und es keine öffentliche API gibt, um darauf zuzugreifen.
Ismael
Benutzer2609980
Ismael
Benutzer2609980