mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #10873 from ethereum/isoltest-balance
[isoltest] Add support to query balance.
This commit is contained in:
commit
850c25bf8e
@ -125,6 +125,17 @@ void SemanticTest::initializeBuiltins()
|
|||||||
{
|
{
|
||||||
return util::toBigEndian(u256(0x1234));
|
return util::toBigEndian(u256(0x1234));
|
||||||
};
|
};
|
||||||
|
soltestAssert(m_builtins.count("balance") == 0, "");
|
||||||
|
m_builtins["balance"] = [this](FunctionCall const& _call) -> std::optional<bytes>
|
||||||
|
{
|
||||||
|
soltestAssert(_call.arguments.parameters.size() <= 1, "Account address expected.");
|
||||||
|
h160 address;
|
||||||
|
if (_call.arguments.parameters.size() == 1)
|
||||||
|
address = h160(_call.arguments.parameters.at(0).rawString);
|
||||||
|
else
|
||||||
|
address = m_contractAddress;
|
||||||
|
return util::toBigEndian(SolidityExecutionFramework::balanceAt(address));
|
||||||
|
};
|
||||||
soltestAssert(m_builtins.count("storageEmpty") == 0, "");
|
soltestAssert(m_builtins.count("storageEmpty") == 0, "");
|
||||||
m_builtins["storageEmpty"] = [this](FunctionCall const& _call) -> std::optional<bytes>
|
m_builtins["storageEmpty"] = [this](FunctionCall const& _call) -> std::optional<bytes>
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
contract Other {
|
||||||
|
constructor() payable {
|
||||||
|
}
|
||||||
|
function getAddress() public returns (address) {
|
||||||
|
return address(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contract ClientReceipt {
|
||||||
|
Other other;
|
||||||
|
constructor() payable {
|
||||||
|
other = new Other{value:500}();
|
||||||
|
}
|
||||||
|
function getAddress() public returns (address) {
|
||||||
|
return other.getAddress();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// constructor(), 2000 wei ->
|
||||||
|
// gas irOptimized: 191881
|
||||||
|
// gas legacy: 235167
|
||||||
|
// gas legacyOptimized: 180756
|
||||||
|
// balance -> 1500
|
||||||
|
// gas irOptimized: 191881
|
||||||
|
// gas legacy: 235167
|
||||||
|
// gas legacyOptimized: 180756
|
||||||
|
// getAddress() -> 0xf01f7809444bd9a93a854361c6fae3f23d9e23db
|
||||||
|
// balance: 0xf01f7809444bd9a93a854361c6fae3f23d9e23db -> 500
|
@ -0,0 +1,8 @@
|
|||||||
|
contract ClientReceipt {
|
||||||
|
constructor() payable {}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// constructor(), 1000 wei ->
|
||||||
|
// balance -> 1000
|
@ -0,0 +1,8 @@
|
|||||||
|
contract ClientReceipt {
|
||||||
|
constructor() payable {}
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// constructor(), 1 ether ->
|
||||||
|
// balance -> 1000000000000000000
|
@ -0,0 +1,7 @@
|
|||||||
|
contract ClientReceipt {
|
||||||
|
}
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// ----
|
||||||
|
// balance -> 0
|
||||||
|
// balance: 0x0000000000000000000000000000000000000000 -> 0
|
@ -8,14 +8,10 @@ contract C {
|
|||||||
function msgvalue() internal returns (uint) {
|
function msgvalue() internal returns (uint) {
|
||||||
return msg.value;
|
return msg.value;
|
||||||
}
|
}
|
||||||
// TODO: remove this helper function once isoltest supports balance checking
|
|
||||||
function balance() external returns (uint) {
|
|
||||||
return address(this).balance;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// ====
|
// ====
|
||||||
// compileViaYul: also
|
// compileViaYul: also
|
||||||
// compileToEwasm: also
|
// compileToEwasm: also
|
||||||
// ----
|
// ----
|
||||||
// f(), 27 wei -> FAILURE
|
// f(), 27 wei -> FAILURE
|
||||||
// balance() -> 0
|
// balance -> 0
|
||||||
|
@ -14,7 +14,9 @@ contract C {
|
|||||||
// compileViaYul: also
|
// compileViaYul: also
|
||||||
// ----
|
// ----
|
||||||
// constructor(), 2 wei: 3 ->
|
// constructor(), 2 wei: 3 ->
|
||||||
|
// gas legacy: 148000
|
||||||
// state() -> 3
|
// state() -> 3
|
||||||
// balance() -> 2
|
// balance() -> 2
|
||||||
|
// balance -> 2
|
||||||
// update(uint256): 4
|
// update(uint256): 4
|
||||||
// state() -> 4
|
// state() -> 4
|
||||||
|
@ -9,8 +9,8 @@ contract A {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ====
|
// ====
|
||||||
// compileViaYul: also
|
|
||||||
// compileToEwasm: also
|
// compileToEwasm: also
|
||||||
|
// compileViaYul: also
|
||||||
// ----
|
// ----
|
||||||
// data() -> 0
|
// data() -> 0
|
||||||
// ()
|
// ()
|
||||||
|
Loading…
Reference in New Issue
Block a user