|
|
|
@@ -832,7 +832,7 @@ BOOST_AUTO_TEST_CASE(blockchain)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
m_evmcHost->tx_context.block_coinbase = EVMHost::convertToEVMC(Address("0x1212121212121212121212121212121212121212"));
|
|
|
|
|
m_evmcHost->tx_context.block_coinbase = EVMHost::convertToEVMC(h160("0x1212121212121212121212121212121212121212"));
|
|
|
|
|
m_evmcHost->newBlock();
|
|
|
|
|
m_evmcHost->newBlock();
|
|
|
|
|
m_evmcHost->newBlock();
|
|
|
|
@@ -858,7 +858,7 @@ BOOST_AUTO_TEST_CASE(send_ether)
|
|
|
|
|
|
|
|
|
|
u256 amount(250);
|
|
|
|
|
compileAndRun(sourceCode, amount + 1);
|
|
|
|
|
u160 address(23);
|
|
|
|
|
h160 address(23);
|
|
|
|
|
ABI_CHECK(callContractFunction("a(address,uint256)", address, amount), encodeArgs(1));
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(address), amount);
|
|
|
|
|
)
|
|
|
|
@@ -891,11 +891,11 @@ BOOST_AUTO_TEST_CASE(transfer_ether)
|
|
|
|
|
DISABLE_EWASM_TESTRUN()
|
|
|
|
|
|
|
|
|
|
compileAndRun(sourceCode, 0, "B");
|
|
|
|
|
u160 const nonPayableRecipient = m_contractAddress;
|
|
|
|
|
h160 const nonPayableRecipient = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "C");
|
|
|
|
|
u160 const oogRecipient = m_contractAddress;
|
|
|
|
|
h160 const oogRecipient = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 20, "A");
|
|
|
|
|
u160 payableRecipient(23);
|
|
|
|
|
h160 payableRecipient(23);
|
|
|
|
|
ABI_CHECK(callContractFunction("a(address,uint256)", payableRecipient, 10), encodeArgs(10));
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(payableRecipient), 10);
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
|
|
|
|
@@ -935,7 +935,7 @@ BOOST_AUTO_TEST_CASE(selfdestruct)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
u256 amount(130);
|
|
|
|
|
u160 address(23);
|
|
|
|
|
h160 address(23);
|
|
|
|
|
ALSO_VIA_YUL(
|
|
|
|
|
DISABLE_EWASM_TESTRUN()
|
|
|
|
|
|
|
|
|
@@ -1164,7 +1164,7 @@ BOOST_AUTO_TEST_CASE(inter_contract_calls)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1195,7 +1195,7 @@ BOOST_AUTO_TEST_CASE(inter_contract_calls_with_complex_parameters)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1227,7 +1227,7 @@ BOOST_AUTO_TEST_CASE(inter_contract_calls_accessing_this)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1259,7 +1259,7 @@ BOOST_AUTO_TEST_CASE(calls_to_this)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1294,7 +1294,7 @@ BOOST_AUTO_TEST_CASE(inter_contract_calls_with_local_vars)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1325,7 +1325,7 @@ BOOST_AUTO_TEST_CASE(fixed_bytes_in_calls)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("setHelper(address)", c_helperAddress) == bytes());
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("getHelper()", c_helperAddress) == encodeArgs(c_helperAddress));
|
|
|
|
@@ -1656,7 +1656,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
u160 const c_loggedAddress = m_contractAddress;
|
|
|
|
|
h160 const c_loggedAddress = m_contractAddress;
|
|
|
|
|
|
|
|
|
|
ALSO_VIA_YUL(
|
|
|
|
|
DISABLE_EWASM_TESTRUN()
|
|
|
|
@@ -1719,7 +1719,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name_inherited_emit)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
u160 const c_loggedAddress = m_contractAddress;
|
|
|
|
|
h160 const c_loggedAddress = m_contractAddress;
|
|
|
|
|
|
|
|
|
|
ALSO_VIA_YUL(
|
|
|
|
|
DISABLE_EWASM_TESTRUN()
|
|
|
|
@@ -1814,7 +1814,7 @@ BOOST_AUTO_TEST_CASE(event_lots_of_data)
|
|
|
|
|
callContractFunctionWithValue("deposit(bytes32)", value, id);
|
|
|
|
|
BOOST_REQUIRE_EQUAL(numLogs(), 1);
|
|
|
|
|
BOOST_CHECK_EQUAL(logAddress(0), m_contractAddress);
|
|
|
|
|
BOOST_CHECK(logData(0) == encodeArgs((u160)m_sender, id, value, true));
|
|
|
|
|
BOOST_CHECK(logData(0) == encodeArgs(m_sender, id, value, true));
|
|
|
|
|
BOOST_REQUIRE_EQUAL(numLogTopics(0), 1);
|
|
|
|
|
BOOST_CHECK_EQUAL(logTopic(0, 0), util::keccak256(string("Deposit(address,bytes32,uint256,bool)")));
|
|
|
|
|
)
|
|
|
|
@@ -2207,7 +2207,7 @@ BOOST_AUTO_TEST_CASE(generic_call)
|
|
|
|
|
}
|
|
|
|
|
)**";
|
|
|
|
|
compileAndRun(sourceCode, 0, "receiver");
|
|
|
|
|
u160 const c_receiverAddress = m_contractAddress;
|
|
|
|
|
h160 const c_receiverAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 50, "sender");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("doSend(address)", c_receiverAddress) == encodeArgs(23));
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 50 - 2);
|
|
|
|
@@ -2242,13 +2242,13 @@ BOOST_AUTO_TEST_CASE(generic_delegatecall)
|
|
|
|
|
string source = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n" + string(sourceCode);
|
|
|
|
|
|
|
|
|
|
compileAndRun(source, 0, "Receiver");
|
|
|
|
|
u160 const c_receiverAddress = m_contractAddress;
|
|
|
|
|
h160 const c_receiverAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(source, 50, "Sender");
|
|
|
|
|
u160 const c_senderAddress = m_contractAddress;
|
|
|
|
|
h160 const c_senderAddress = m_contractAddress;
|
|
|
|
|
BOOST_CHECK(m_sender != c_senderAddress); // just for sanity
|
|
|
|
|
ABI_CHECK(callContractFunctionWithValue("doSend(address)", 11, c_receiverAddress), encodeArgs());
|
|
|
|
|
ABI_CHECK(callContractFunction("received()"), encodeArgs(u256(23)));
|
|
|
|
|
ABI_CHECK(callContractFunction("sender()"), encodeArgs(u160(m_sender)));
|
|
|
|
|
ABI_CHECK(callContractFunction("sender()"), encodeArgs(m_sender));
|
|
|
|
|
ABI_CHECK(callContractFunction("value()"), encodeArgs(u256(11)));
|
|
|
|
|
m_contractAddress = c_receiverAddress;
|
|
|
|
|
ABI_CHECK(callContractFunction("received()"), encodeArgs(u256(0)));
|
|
|
|
@@ -2294,7 +2294,7 @@ BOOST_AUTO_TEST_CASE(generic_staticcall)
|
|
|
|
|
}
|
|
|
|
|
)**";
|
|
|
|
|
compileAndRun(sourceCode, 0, "A");
|
|
|
|
|
u160 const c_addressA = m_contractAddress;
|
|
|
|
|
h160 const c_addressA = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "C");
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", c_addressA), encodeArgs(true, 0x40, 0x20, 23));
|
|
|
|
|
ABI_CHECK(callContractFunction("g(address)", c_addressA), encodeArgs(true, 0x40, 0x20, 23 + 42));
|
|
|
|
@@ -2316,9 +2316,9 @@ BOOST_AUTO_TEST_CASE(library_call_in_homestead)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs());
|
|
|
|
|
ABI_CHECK(callContractFunction("sender()"), encodeArgs(u160(m_sender)));
|
|
|
|
|
ABI_CHECK(callContractFunction("sender()"), encodeArgs(m_sender));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOST_AUTO_TEST_CASE(library_call_protection)
|
|
|
|
@@ -2344,13 +2344,13 @@ BOOST_AUTO_TEST_CASE(library_call_protection)
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
ABI_CHECK(callContractFunction("np(Lib.S storage)", 0), encodeArgs());
|
|
|
|
|
ABI_CHECK(callContractFunction("v(Lib.S storage)", 0), encodeArgs(u160(m_sender)));
|
|
|
|
|
ABI_CHECK(callContractFunction("v(Lib.S storage)", 0), encodeArgs(m_sender));
|
|
|
|
|
ABI_CHECK(callContractFunction("pu()"), encodeArgs(2));
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("s()"), encodeArgs(0));
|
|
|
|
|
ABI_CHECK(callContractFunction("np()"), encodeArgs(u160(m_sender)));
|
|
|
|
|
ABI_CHECK(callContractFunction("np()"), encodeArgs(m_sender));
|
|
|
|
|
ABI_CHECK(callContractFunction("s()"), encodeArgs(3));
|
|
|
|
|
ABI_CHECK(callContractFunction("v()"), encodeArgs(u160(m_sender)));
|
|
|
|
|
ABI_CHECK(callContractFunction("v()"), encodeArgs(m_sender));
|
|
|
|
|
ABI_CHECK(callContractFunction("pu()"), encodeArgs(2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -2374,7 +2374,7 @@ BOOST_AUTO_TEST_CASE(library_staticcall_delegatecall)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -2616,7 +2616,7 @@ BOOST_AUTO_TEST_CASE(struct_referencing)
|
|
|
|
|
compileAndRun(sourceCode, 0, "L");
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(0, 3));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(4));
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{ {"L", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{ {"L", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(2));
|
|
|
|
|
ABI_CHECK(callContractFunction("h()"), encodeArgs(0, 5));
|
|
|
|
@@ -2662,7 +2662,7 @@ BOOST_AUTO_TEST_CASE(enum_referencing)
|
|
|
|
|
compileAndRun(sourceCode, 0, "L");
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(1));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"L", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(3));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(3));
|
|
|
|
|
ABI_CHECK(callContractFunction("h()"), encodeArgs(1));
|
|
|
|
@@ -2888,7 +2888,7 @@ BOOST_AUTO_TEST_CASE(failing_send)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Helper");
|
|
|
|
|
u160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
h160 const c_helperAddress = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 20, "Main");
|
|
|
|
|
BOOST_REQUIRE(callContractFunction("callHelper(address)", c_helperAddress) == encodeArgs(true, 20));
|
|
|
|
|
}
|
|
|
|
@@ -3490,7 +3490,7 @@ BOOST_AUTO_TEST_CASE(library_call)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(33) * 9));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3505,7 +3505,7 @@ BOOST_AUTO_TEST_CASE(library_function_external)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(bytes)", u256(0x20), u256(5), "abcde"), encodeArgs("c"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3522,7 +3522,7 @@ BOOST_AUTO_TEST_CASE(library_stray_values)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(33)), encodeArgs(u256(42)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3552,7 +3552,7 @@ BOOST_AUTO_TEST_CASE(internal_types_in_library)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(4), u256(17)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3583,7 +3583,7 @@ BOOST_AUTO_TEST_CASE(mapping_arguments_in_library)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(1), u256(42)), encodeArgs(u256(0)));
|
|
|
|
|
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(2), u256(84)), encodeArgs(u256(0)));
|
|
|
|
|
ABI_CHECK(callContractFunction("set(uint256,uint256)", u256(21), u256(7)), encodeArgs(u256(0)));
|
|
|
|
@@ -3631,7 +3631,7 @@ BOOST_AUTO_TEST_CASE(mapping_returns_in_library)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(1), u256(42)), encodeArgs(u256(0)));
|
|
|
|
|
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(2), u256(84)), encodeArgs(u256(0)));
|
|
|
|
|
ABI_CHECK(callContractFunction("set(bool,uint256,uint256)", true, u256(21), u256(7)), encodeArgs(u256(0)));
|
|
|
|
@@ -3707,7 +3707,7 @@ BOOST_AUTO_TEST_CASE(mapping_returns_in_library_named)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(0), u256(42), u256(0), u256(0), u256(21), u256(84)));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(0), u256(42), u256(0), u256(0), u256(21), u256(17)));
|
|
|
|
|
}
|
|
|
|
@@ -3735,7 +3735,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_public)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(0), u256(42), u256(23), u256(0), u256(99)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3770,7 +3770,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_external)
|
|
|
|
|
{
|
|
|
|
|
string prefix = "pragma abicoder " + string(v2 ? "v2" : "v1") + ";\n";
|
|
|
|
|
compileAndRun(prefix + libSourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(prefix + sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(prefix + sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(2), u256(0), u256(84), u256(46), u256(0), u256(198)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -3796,7 +3796,7 @@ BOOST_AUTO_TEST_CASE(using_library_mappings_return)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(1), u256(0), u256(42), u256(23), u256(0), u256(99)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3824,7 +3824,7 @@ BOOST_AUTO_TEST_CASE(using_library_structs)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "Lib");
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"Lib", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"Lib", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7), u256(8)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -3982,10 +3982,10 @@ BOOST_AUTO_TEST_CASE(reject_ether_sent_to_library)
|
|
|
|
|
compileAndRun(sourceCode, 10, "c");
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", encodeArgs(u160(libraryAddress))), encodeArgs(false));
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", encodeArgs(libraryAddress)), encodeArgs(false));
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", encodeArgs(u160(m_contractAddress))), encodeArgs(true));
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", encodeArgs(m_contractAddress)), encodeArgs(true));
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(m_contractAddress), 10);
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(libraryAddress), 0);
|
|
|
|
|
}
|
|
|
|
@@ -4029,7 +4029,7 @@ BOOST_AUTO_TEST_CASE(using_for_function_on_int)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(9)), encodeArgs(u256(2 * 9)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -4047,7 +4047,7 @@ BOOST_AUTO_TEST_CASE(using_for_function_on_struct)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(3 * 7)));
|
|
|
|
|
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(3 * 7)));
|
|
|
|
|
}
|
|
|
|
@@ -4070,7 +4070,7 @@ BOOST_AUTO_TEST_CASE(using_for_overload)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
|
|
|
|
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
|
|
|
|
}
|
|
|
|
@@ -4089,7 +4089,7 @@ BOOST_AUTO_TEST_CASE(using_for_by_name)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
|
|
|
|
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
|
|
|
|
}
|
|
|
|
@@ -4109,7 +4109,7 @@ BOOST_AUTO_TEST_CASE(bound_function_in_function)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "L");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"L", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(7)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -4127,7 +4127,7 @@ BOOST_AUTO_TEST_CASE(bound_function_in_var)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f(uint256)", u256(7)), encodeArgs(u256(6 * 7)));
|
|
|
|
|
ABI_CHECK(callContractFunction("x()"), encodeArgs(u256(6 * 7)));
|
|
|
|
|
}
|
|
|
|
@@ -4150,7 +4150,7 @@ BOOST_AUTO_TEST_CASE(bound_function_to_string)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"D", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"D", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunction("f()"), encodeArgs(u256(3)));
|
|
|
|
|
ABI_CHECK(callContractFunction("g()"), encodeArgs(u256(3)));
|
|
|
|
|
}
|
|
|
|
@@ -4302,9 +4302,9 @@ BOOST_AUTO_TEST_CASE(mutex)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 500, "Fund");
|
|
|
|
|
auto fund = m_contractAddress;
|
|
|
|
|
h160 const fund = m_contractAddress;
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(fund), 500);
|
|
|
|
|
compileAndRun(sourceCode, 0, "Attacker", encodeArgs(u160(fund)));
|
|
|
|
|
compileAndRun(sourceCode, 0, "Attacker", encodeArgs(fund));
|
|
|
|
|
ABI_CHECK(callContractFunction("setProtected(bool)", true), encodeArgs());
|
|
|
|
|
ABI_CHECK(callContractFunction("attack()"), encodeArgs());
|
|
|
|
|
BOOST_CHECK_EQUAL(balanceAt(fund), 500);
|
|
|
|
@@ -4348,7 +4348,7 @@ BOOST_AUTO_TEST_CASE(payable_function_calls_library)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "L");
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, Address>{{"L", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "C", bytes(), map<string, h160>{{"L", m_contractAddress}});
|
|
|
|
|
ABI_CHECK(callContractFunctionWithValue("f()", 27), encodeArgs(u256(7)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -4400,7 +4400,7 @@ BOOST_AUTO_TEST_CASE(mem_resize_is_not_paid_at_call)
|
|
|
|
|
)";
|
|
|
|
|
|
|
|
|
|
compileAndRun(sourceCode, 0, "C");
|
|
|
|
|
u160 cAddr = m_contractAddress;
|
|
|
|
|
h160 const cAddr = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "D");
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", cAddr), encodeArgs(u256(7)));
|
|
|
|
|
}
|
|
|
|
@@ -4814,7 +4814,7 @@ BOOST_AUTO_TEST_CASE(interface_contract)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "A");
|
|
|
|
|
u160 const recipient = m_contractAddress;
|
|
|
|
|
h160 const recipient = m_contractAddress;
|
|
|
|
|
compileAndRun(sourceCode, 0, "C");
|
|
|
|
|
ABI_CHECK(callContractFunction("f(address)", recipient), encodeArgs(true));
|
|
|
|
|
}
|
|
|
|
@@ -5633,7 +5633,7 @@ BOOST_AUTO_TEST_CASE(event_wrong_abi_name)
|
|
|
|
|
}
|
|
|
|
|
)";
|
|
|
|
|
compileAndRun(sourceCode, 0, "ClientReceipt", bytes());
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, Address>{{"ClientReceipt", m_contractAddress}});
|
|
|
|
|
compileAndRun(sourceCode, 0, "Test", bytes(), map<string, h160>{{"ClientReceipt", m_contractAddress}});
|
|
|
|
|
|
|
|
|
|
callContractFunction("f()");
|
|
|
|
|
BOOST_REQUIRE_EQUAL(numLogs(), 1);
|
|
|
|
|