Skip to content

Commit 770cf26

Browse files
authored
Merge pull request #612 from iotaledger/legacy-send
evm: support legacy send function
2 parents 9887827 + a2fd13d commit 770cf26

File tree

15 files changed

+205
-68
lines changed

15 files changed

+205
-68
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ require (
6565
golang.org/x/crypto v0.36.0
6666
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
6767
golang.org/x/net v0.37.0
68+
golang.org/x/text v0.23.0
6869
golang.org/x/time v0.11.0
6970
pgregory.net/rapid v1.2.0
7071
)
@@ -253,7 +254,6 @@ require (
253254
golang.org/x/mod v0.24.0 // indirect
254255
golang.org/x/sync v0.12.0 // indirect
255256
golang.org/x/sys v0.31.0 // indirect
256-
golang.org/x/text v0.23.0 // indirect
257257
golang.org/x/tools v0.31.0 // indirect
258258
google.golang.org/protobuf v1.36.5 // indirect
259259
gopkg.in/ini.v1 v1.67.0 // indirect

packages/evm/evmtest/ERC20Coin.bin

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/evm/evmtest/ISCTest.bin

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

packages/evm/evmtest/ISCTest.sol

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ contract ISCTest {
3737
function emitDummyEvent() public {
3838
emit DummyEvent("foobar");
3939
}
40-
40+
4141

4242
event SenderAccountEvent(ISCAgentID sender);
4343

@@ -65,9 +65,7 @@ contract ISCTest {
6565
assets.coins[0].coinType = allowance.coins[0].coinType;
6666
assets.coins[0].amount = allowance.coins[0].amount;
6767

68-
ISCSendMetadata memory metadata;
69-
ISCSendOptions memory options;
70-
ISC.sandbox.send(receiver, assets, metadata, options);
68+
ISC.sandbox.transferToL1(receiver, assets);
7169
}
7270

7371
function callInccounter() public {
@@ -177,7 +175,7 @@ contract ISCTest {
177175
function testSelfDestruct6780() public{
178176
// deploy a new contract instance
179177
SelfDestruct6780 c = new SelfDestruct6780();
180-
emit TestSelfDestruct6780ContractCreated(address(c));
178+
emit TestSelfDestruct6780ContractCreated(address(c));
181179
// call selfdestruct in the same tx
182180
c.testSelfDestruct(payable(msg.sender));
183181
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220d0beec55b3706daee17c2a7f3a6cb048e6263803861eaedac422a1f922aece5764736f6c634300081d0033
1+
6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220fc1f464579dc03ee28bf32ee4c9d7ba8c96f5cb45c43b9540a8afc3e4f5c133564736f6c634300081d0033

packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea26469706673582212205215fc6032af6a80424953548c420491e912ae9098cade096cff20470dbfcb3a64736f6c634300081d0033
1+
6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea264697066735822122012f73c1a1f1b361b20b2e3828e238375443bed59a14889a0d691eab9aae1c89664736f6c634300081d0033
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea264697066735822122023c56e7f34d46fa980b13bab27731d3b2ea96f8f97015004c996542e3f52238a64736f6c634300081d0033
1+
6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea2646970667358221220d610f500a9f33e1d4f02ed2b4ea8e8f6c85bea11b6116b92843292858d4f20a264736f6c634300081d0033

packages/vm/core/evm/evmimpl/iscmagic_sandbox.go

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/holiman/uint256"
99

1010
"github.com/iotaledger/wasp/clients/iota-go/iotago"
11+
"github.com/iotaledger/wasp/clients/iota-go/iotajsonrpc"
1112
"github.com/iotaledger/wasp/packages/coin"
1213
"github.com/iotaledger/wasp/packages/cryptolib"
1314
"github.com/iotaledger/wasp/packages/hashing"
@@ -76,31 +77,22 @@ func (h *magicContractHandler) handleCallValue(callValue *uint256.Int) coin.Valu
7677
return adjustedTxValue
7778
}
7879

79-
// handler for ISCSandbox::send
80-
func (h *magicContractHandler) Send(
80+
// handler for ISCSandbox::transferToL1
81+
func (h *magicContractHandler) TransferToL1(
8182
targetAddress iotago.Address,
8283
assets iscmagic.ISCAssets,
83-
// For now both args are kept for legacy reasons. Removing those would be the "right choice", but will break tracing
84-
// for migrated blocks. We need to estimate how many requests would be affected and assess if we can remove those.
85-
metadata iscmagic.ISCSendMetadata,
86-
sendOptions iscmagic.ISCSendOptions,
8784
) {
8885
req := isc.RequestParameters{
8986
TargetAddress: cryptolib.NewAddressFromIota(&targetAddress),
9087
Assets: assets.Unwrap(),
9188
}
9289

90+
// also send any base tokens included as call value
9391
if h.callValue.BitLen() > 0 {
9492
additionalCallValue := h.handleCallValue(h.callValue)
9593
req.Assets.AddBaseTokens(additionalCallValue)
9694
}
9795

98-
// make sure that allowance <= sent tokens, so that the target contract does not
99-
// spend from the common account
100-
if metadata.Unwrap() != nil {
101-
panic(errMetadataUnsupported)
102-
}
103-
10496
h.moveAssetsToCommonAccount(req.Assets)
10597

10698
// emit ERC20 events for coin transfers
@@ -114,6 +106,37 @@ func (h *magicContractHandler) Send(
114106
)
115107
}
116108

109+
// Deprecated: This is included to support calls to the legacy function ISCSandbox::send.
110+
// It is necessary for tracing past blocks.
111+
func (h *magicContractHandler) Send(
112+
legacyTarget iscmagic.LegacyL1Address,
113+
legacyAssets iscmagic.LegacyISCAssets,
114+
_ bool,
115+
_ iscmagic.LegacyISCSendMetadata,
116+
_ iscmagic.LegacyISCSendOptions,
117+
) {
118+
if len(legacyTarget.Data) != 33 {
119+
panic("cannot decode legacy address")
120+
}
121+
var target iotago.Address
122+
copy(target[:], legacyTarget.Data[1:])
123+
124+
assets := iscmagic.ISCAssets{}
125+
if legacyAssets.BaseTokens > 0 {
126+
assets.Coins = append(assets.Coins, iscmagic.CoinBalance{
127+
CoinType: iscmagic.CoinType(iotajsonrpc.IotaCoinType),
128+
Amount: legacyAssets.BaseTokens,
129+
})
130+
}
131+
for _ = range legacyAssets.NativeTokens {
132+
panic("cannot send legacy native tokens")
133+
}
134+
for _ = range legacyAssets.Nfts {
135+
panic("cannot send legacy NFTs")
136+
}
137+
h.TransferToL1(target, assets)
138+
}
139+
117140
// handler for ISCSandbox::call
118141
func (h *magicContractHandler) Call(
119142
msg iscmagic.ISCMessage,

packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)