Skip to content

Commit 9e7c970

Browse files
authored
Merge pull request #93 from paritytech/pg/updates
Update eth-rpc tests
2 parents 6ffa857 + 775b684 commit 9e7c970

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+2770
-1415
lines changed

eth-rpc/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ abi/*
1818
evm/*
1919
pvm/*
2020
!.gitkeep
21+
src/samples
2122

2223
# Editor directories and files
2324
.vscode/*

eth-rpc/contracts/Errors.sol

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
pragma solidity ^0.8.0;
33

44
contract Errors {
5-
bool public state;
5+
bool public state;
66

7-
// Payable function that can be used to test insufficient funds errors
7+
// Payable function that can be used to test insufficient funds errors
88
function valueMatch(uint256 value) public payable {
9-
require(msg.value == value , "msg.value does not match value");
9+
require(msg.value == value, 'msg.value does not match value');
1010
}
1111

1212
function setState(bool newState) public {
@@ -15,7 +15,7 @@ contract Errors {
1515

1616
// Trigger a require statement failure with a custom error message
1717
function triggerRequireError() public pure {
18-
require(false, "This is a require error");
18+
require(false, 'This is a require error');
1919
}
2020

2121
// Trigger an assert statement failure
@@ -25,7 +25,7 @@ contract Errors {
2525

2626
// Trigger a revert statement with a custom error message
2727
function triggerRevertError() public pure {
28-
revert("This is a revert error");
28+
revert('This is a revert error');
2929
}
3030

3131
// Trigger a division by zero error
@@ -45,7 +45,6 @@ contract Errors {
4545
error CustomError(string message);
4646

4747
function triggerCustomError() public pure {
48-
revert CustomError("This is a custom error");
48+
revert CustomError('This is a custom error');
4949
}
5050
}
51-

eth-rpc/contracts/Event.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ contract EventExample {
66

77
function triggerEvent() public {
88
uint256 value = 12345;
9-
string memory message = "Hello world";
9+
string memory message = 'Hello world';
1010
emit ExampleEvent(msg.sender, value, message);
1111
}
1212
}
13-

eth-rpc/contracts/Flipper.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,3 @@ contract FlipperCaller {
3636
return Flipper(flipperAddress).getValue();
3737
}
3838
}
39-

eth-rpc/contracts/PiggyBank.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
pragma solidity ^0.8.0;
33

44
contract PiggyBank {
5-
65
uint256 private balance;
76
address public owner;
87

@@ -20,13 +19,14 @@ contract PiggyBank {
2019
return balance;
2120
}
2221

23-
function withdraw(uint256 withdrawAmount) public returns (uint256 remainingBal) {
24-
require(msg.sender == owner, "You are not the owner");
22+
function withdraw(
23+
uint256 withdrawAmount
24+
) public returns (uint256 remainingBal) {
25+
require(msg.sender == owner, 'You are not the owner');
2526
balance -= withdrawAmount;
26-
(bool success, ) = payable(msg.sender).call{value: withdrawAmount}("");
27-
require(success, "Transfer failed");
27+
(bool success, ) = payable(msg.sender).call{value: withdrawAmount}('');
28+
require(success, 'Transfer failed');
2829

2930
return balance;
3031
}
3132
}
32-

eth-rpc/contracts/Pretrace.sol

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
/// @title PretraceFixture
5+
/// @notice A simple contract to exercise storage, balance, and nonce changes
6+
contract PretraceFixture {
7+
uint256 public value;
8+
mapping(address => uint256) public balances;
9+
10+
constructor() payable {
11+
balances[msg.sender] = msg.value;
12+
value = 42;
13+
}
14+
15+
function writeStorage(uint256 _value) external {
16+
value = _value;
17+
}
18+
19+
function readStorage() external view returns (uint256) {
20+
return value;
21+
}
22+
23+
function deposit() external payable {
24+
balances[msg.sender] += msg.value;
25+
}
26+
27+
function withdraw(uint256 amount) external {
28+
require(balances[msg.sender] >= amount, 'Insufficient balance');
29+
balances[msg.sender] -= amount;
30+
(bool sent, ) = msg.sender.call{value: amount}('');
31+
require(sent, 'Transfer failed');
32+
}
33+
34+
function getContractBalance() external view returns (uint256) {
35+
return address(this).balance;
36+
}
37+
38+
function getExternalBalance(
39+
address account
40+
) external view returns (uint256) {
41+
return account.balance;
42+
}
43+
44+
function createChild() external returns (address) {
45+
PretraceFixtureChild c = new PretraceFixtureChild();
46+
return address(c);
47+
}
48+
49+
function callContract(address childAddr) external {
50+
PretraceFixtureChild(childAddr).increment();
51+
}
52+
53+
function delegatecallContract(address childAddr) external {
54+
(bool success, ) = childAddr.delegatecall(
55+
abi.encodeWithSelector(PretraceFixtureChild.increment.selector)
56+
);
57+
require(success, "Delegatecall failed");
58+
}}
59+
60+
/// @title Child
61+
/// @notice A disposable child contract used to test contract deployment and calls
62+
contract PretraceFixtureChild {
63+
uint256 public value = 1;
64+
65+
function increment() external {
66+
value += 1;
67+
}
68+
69+
}

eth-rpc/contracts/Redstone.sol

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22

33
pragma solidity ^0.8.4;
44

5-
import "@redstone-finance/evm-connector/contracts/data-services/RapidDemoConsumerBase.sol";
5+
// TODO restore once https://github.com/paritytech/revive/pull/343 is released
6+
// import '@redstone-finance/evm-connector/contracts/data-services/PrimaryProdDataServiceConsumerBase.sol';
7+
import './node_modules/@redstone-finance/evm-connector/contracts/data-services/PrimaryProdDataServiceConsumerBase.sol';
68

7-
contract ExampleRedstoneShowroom is RapidDemoConsumerBase {
8-
function getPrices() public view returns(uint256[] memory) {
9-
bytes32[] memory dataFeedIds = new bytes32[](6);
10-
dataFeedIds[0] = bytes32("BTC");
11-
dataFeedIds[1] = bytes32("ETH");
12-
dataFeedIds[2] = bytes32("BNB");
13-
dataFeedIds[3] = bytes32("AR");
14-
dataFeedIds[4] = bytes32("AVAX");
15-
dataFeedIds[5] = bytes32("CELO");
16-
return getOracleNumericValuesFromTxMsg(dataFeedIds);
17-
}
9+
contract ExampleRedstoneShowroom is PrimaryProdDataServiceConsumerBase {
10+
function getPrices() public view returns (uint256[] memory) {
11+
bytes32[] memory dataFeedIds = new bytes32[](6);
12+
dataFeedIds[0] = bytes32('BTC');
13+
dataFeedIds[1] = bytes32('ETH');
14+
dataFeedIds[2] = bytes32('BNB');
15+
dataFeedIds[3] = bytes32('AR');
16+
dataFeedIds[4] = bytes32('AVAX');
17+
dataFeedIds[5] = bytes32('CELO');
18+
return getOracleNumericValuesFromTxMsg(dataFeedIds);
19+
}
1820
}
21+
22+
23+

eth-rpc/contracts/Storage.sol

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// SPDX-License-Identifier: GPL-3.0
2+
3+
pragma solidity >=0.8.2 <0.9.0;
4+
5+
/**
6+
* @title Storage
7+
* @dev Store & retrieve value in a variable
8+
* @custom:dev-run-script ./scripts/deploy_with_ethers.ts
9+
*/
10+
contract Storage {
11+
uint256 public n1;
12+
uint256 public n2;
13+
14+
constructor() {
15+
n1 = 42;
16+
n2 = 100;
17+
}
18+
19+
/**
20+
* @dev Store value in variable
21+
* @param num value to store
22+
*/
23+
function write_n1_read_n2(uint256 num) public {
24+
n1 = num + n2;
25+
}
26+
27+
function write_n2(uint256 num) public {
28+
n2 = num;
29+
}
30+
}

eth-rpc/contracts/Tester.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ contract Tester {
1111
constructor() payable {
1212
emit TesterDeployed(msg.sender);
1313
value = 42;
14-
name = "Hello world";
14+
name = 'Hello world';
1515
}
1616

1717
function setValue(uint256 v) external {
@@ -21,6 +21,4 @@ contract Tester {
2121
function setName(string memory v) external {
2222
name = v;
2323
}
24-
2524
}
26-

eth-rpc/contracts/Tracing.sol

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,61 @@
22
pragma solidity ^0.8.0;
33

44
contract TracingCaller {
5-
event TraceEvent(uint256 value, string message);
5+
event TraceEvent(uint256 value, string message);
66
address payable public callee;
77

8-
constructor(address payable _callee) payable {
9-
require(_callee != address(0), "Callee address cannot be zero");
8+
constructor(address payable _callee) payable {
9+
require(_callee != address(0), 'Callee address cannot be zero');
1010
callee = _callee;
1111
}
1212

1313
function start(uint256 counter) external {
1414
if (counter == 0) {
15-
return;
15+
return;
1616
}
1717

1818
uint256 paymentAmount = 0.01 ether;
1919
callee.transfer(paymentAmount);
2020

21-
emit TraceEvent(counter, "before");
22-
TracingCallee(callee).consumeGas(counter);
23-
emit TraceEvent(counter, "after");
21+
emit TraceEvent(counter, 'before');
22+
TracingCallee(callee).consumeGas(counter);
23+
emit TraceEvent(counter, 'after');
2424

25-
try TracingCallee(callee).failingFunction{value: paymentAmount}() {
26-
} catch {
27-
}
25+
try
26+
TracingCallee(callee).failingFunction{value: paymentAmount}()
27+
{} catch {}
28+
29+
this.start(counter - 1);
30+
}
2831

29-
this.start(counter - 1);
32+
function create() external returns (address) {
33+
TracingCallee newCallee = new TracingCallee();
34+
return address(newCallee);
35+
}
36+
37+
function create2() external returns (address) {
38+
bytes32 salt = bytes32(uint256(0x42));
39+
TracingCallee newCallee = new TracingCallee{salt: salt}();
40+
return address(newCallee);
3041
}
3142
}
3243

3344
contract TracingCallee {
3445
event CalleeCalled(uint256 counter);
3546

3647
function consumeGas(uint256 counter) external {
37-
// burn some gas
48+
// burn some gas
3849
for (uint256 i = 0; i < 10; i++) {
39-
uint256(keccak256(abi.encodePacked(i)));
50+
uint256(keccak256(abi.encodePacked(i)));
4051
}
4152

4253
emit CalleeCalled(counter);
4354
}
4455

45-
function failingFunction() external payable {
46-
require(false, "This function always fails");
56+
function failingFunction() external payable {
57+
require(false, 'This function always fails');
4758
}
4859

49-
// Enable contract to receive Ether
60+
// Enable contract to receive Ether
5061
receive() external payable {}
5162
}
52-

0 commit comments

Comments
 (0)