Insbesondere wenn ich mehrere verschiedene Token an einen Smart Contract senden wollte, es aber für die Vertragsfunktion wichtig war, dass alle Token gleichzeitig ankommen, könnte ich sagen; 20 Token A 45 Token B 7.5 Token C in einer einzigen Transaktion oder einfach in der Lage sein, Pakete mit verschiedenen Token zu erstellen, die zusammen versendet werden und zusammen bleiben, wenn sie hin und her gesendet werden?
Sie können dies tun, indem Sie einen Vertrag erstellen und den Vertrag mit den verschiedenen Token-Verträgen interagieren lassen.
Eine Methode wäre, Ihren Vertrag zu erstellen und dann das Eigentum an Ihrem Guthaben auf jedem Token auf den Vertrag zu übertragen. Ungetestetes Beispiel (nur zur Veranschaulichung, nicht unverändert verwenden):
pragma solidity ^0.4.6;
contract ERC20API {
function transfer(address _to, uint256 _value) returns (bool success);
}
contract ProxyContract {
address owner;
function ProxyContract() {
owner = msg.sender;
}
// Simple transfer function, just wraps the normal transfer
function transfer(address token, address _to, uint256 _value) {
if (owner != msg.sender) throw;
ERC20API(token).transfer(_to, _value);
}
// The same as the simple transfer function
// But for multiple transfer instructions
function transferBulk(address[] tokens, address[] _tos, uint256[] _values) {
if (owner != msg.sender) throw;
for(uint256 i=0; i<tokens.length; i++) {
// If one fails, revert the tx, including previous transfers
if (!ERC20API(tokens[i]).transfer(_tos[i], _values[i])) throw;
}
}
}
Eine andere Methode wäre, das Eigentum an den Token unter Ihrem eigenen Konto zu belassen und approve()
gegen jeden Token anzurufen, um Ihrem Proxy-Vertrag die Erlaubnis zu erteilen, sie zu verschieben. Wenn dann der obige Code transfer(_to, _value)
im Proxy-Vertrag aufruft, rufen Sie stattdessen auf transferFrom(msg.sender, _to, _value)
.
James
rstormsf