Skip to content
This repository was archived by the owner on May 4, 2023. It is now read-only.

Commit bcfa14f

Browse files
committed
Support call/transact to multiple contracts
1 parent 0701721 commit bcfa14f

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

example/src/main.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,17 @@ fn badge_reg_test_fee() {
5555

5656
use badgereg::functions;
5757

58-
let result_data = evm.call(functions::fee::encode_input()).unwrap();
58+
let result_data = evm.call(functions::fee::encode_input(), None).unwrap();
5959
// Initial fee is 1 ETH
6060
assert_eq!(
6161
functions::fee::decode_output(&result_data).unwrap(),
6262
wei::from_ether(1)
6363
);
6464

6565
// The owner should be able to set the fee
66-
evm.transact(functions::set_fee::encode_input(wei::from_gwei(10))).unwrap();
66+
evm.transact(functions::set_fee::encode_input(wei::from_gwei(10)), None).unwrap();
6767

68-
let result_data = evm.call(functions::fee::encode_input()).unwrap();
68+
let result_data = evm.call(functions::fee::encode_input(), None).unwrap();
6969
// Fee should be updated
7070
assert_eq!(
7171
functions::fee::decode_output(&result_data).unwrap(),
@@ -74,10 +74,10 @@ fn badge_reg_test_fee() {
7474

7575
// Other address should not be allowed to change the fee
7676
evm.with_sender(Address::from_low_u64_be(10))
77-
.transact(functions::set_fee::encode_input(wei::from_gwei(15)))
77+
.transact(functions::set_fee::encode_input(wei::from_gwei(15)), None)
7878
.unwrap();
7979

80-
let result_data = evm.call(functions::fee::encode_input()).unwrap();
80+
let result_data = evm.call(functions::fee::encode_input(), None).unwrap();
8181
// Fee should not be updated
8282
assert_eq!(
8383
functions::fee::decode_output(&result_data).unwrap(),
@@ -96,6 +96,7 @@ fn anyone_should_be_able_to_register_a_badge() {
9696
.ensure_funds()
9797
.transact(
9898
functions::register::encode_input(Address::from_low_u64_be(10), convert::bytes32("test")),
99+
None
99100
)
100101
.unwrap();
101102

@@ -113,7 +114,7 @@ fn anyone_should_be_able_to_register_a_badge() {
113114

114115
// TODO [ToDr] Perhaps `with_` should not be persistent?
115116
let result_data = evm.with_value(0.into())
116-
.call(functions::from_name::encode_input(convert::bytes32("test")))
117+
.call(functions::from_name::encode_input(convert::bytes32("test")), None)
117118
.unwrap();
118119

119120
// Test that it was registered correctly

solaris/src/evm.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,13 @@ impl Evm {
180180
func(self).expect("Unexpected error occured.");
181181
}
182182

183-
pub fn call(&mut self, encoded_input: ethabi::Bytes) -> error::Result<vm::ReturnData> {
184-
let contract_address = self.contract_address
185-
.expect("Contract address is not set. Did you forget to deploy the contract?");
183+
pub fn call(&mut self, encoded_input: ethabi::Bytes, address: Option<Address>) -> error::Result<vm::ReturnData> {
184+
let contract_address = match address {
185+
Some(s) => s,
186+
None => self.contract_address
187+
.expect("Contract address is not set. Did you forget to deploy the contract?")
188+
};
189+
186190
let mut params = vm::ActionParams::default();
187191
params.sender = self.sender;
188192
params.origin = self.sender;
@@ -215,9 +219,12 @@ impl Evm {
215219
Ok(transact_success.into())
216220
}
217221

218-
pub fn transact(&mut self, encoded_input: ethabi::Bytes) -> error::Result<TransactionOutput> {
219-
let contract_address = self.contract_address
220-
.expect("Contract address is not set. Did you forget to deploy the contract?");
222+
pub fn transact(&mut self, encoded_input: ethabi::Bytes, address: Option<Address>) -> error::Result<TransactionOutput> {
223+
let contract_address = match address {
224+
Some(s) => s,
225+
None => self.contract_address
226+
.expect("Contract address is not set. Did you forget to deploy the contract?")
227+
};
221228
let env_info = self.env_info();
222229
let nonce = self.evm.state().nonce(&self.sender).expect(STATE);
223230
let transaction = Transaction {

tests/tests/test.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ fn msg_sender_should_match_value_passed_into_with_sender() {
6464
let sender = Address::from_low_u64_be(5);
6565

6666
let result_data = evm.with_sender(sender)
67-
.call(functions::get_sender::encode_input())
67+
.call(functions::get_sender::encode_input(), None)
6868
.unwrap();
6969

7070
let output: Address = functions::get_sender::decode_output(&result_data)
@@ -96,7 +96,7 @@ fn msg_value_should_match_value_passed_into_with_value() {
9696

9797
let result_data = evm.with_value(value)
9898
.ensure_funds()
99-
.call(functions::get_value::encode_input())
99+
.call(functions::get_value::encode_input(), None)
100100
.unwrap();
101101

102102
let output: U256 = functions::get_value::decode_output(&result_data)
@@ -122,20 +122,20 @@ fn logs_should_get_collected_and_retrieved_correctly() {
122122

123123
let first_sender_address = Address::from_low_u64_be(10);
124124
evm.with_sender(first_sender_address)
125-
.transact(functions::emit_foo::encode_input())
125+
.transact(functions::emit_foo::encode_input(), None)
126126
.unwrap();
127127

128128
let second_sender_address = Address::from_low_u64_be(11);
129129
evm.with_sender(second_sender_address)
130-
.transact(functions::emit_foo::encode_input())
130+
.transact(functions::emit_foo::encode_input(), None)
131131
.unwrap();
132132

133-
evm.transact(functions::emit_bar::encode_input(100)).unwrap();
134-
evm.transact(functions::emit_bar::encode_input(101)).unwrap();
135-
evm.transact(functions::emit_bar::encode_input(102)).unwrap();
133+
evm.transact(functions::emit_bar::encode_input(100), None).unwrap();
134+
evm.transact(functions::emit_bar::encode_input(101), None).unwrap();
135+
evm.transact(functions::emit_bar::encode_input(102), None).unwrap();
136136

137137
// call should not show up in logs
138-
evm.call(functions::emit_foo::encode_input())
138+
evm.call(functions::emit_foo::encode_input(), None)
139139
.unwrap();
140140

141141
assert_eq!(evm.raw_logs().len(), 5);
@@ -186,7 +186,7 @@ fn value_should_match_value_passed_into_constructor() {
186186

187187
let result_data = evm
188188
.ensure_funds()
189-
.call(functions::get_value::encode_input())
189+
.call(functions::get_value::encode_input(), None)
190190
.unwrap();
191191

192192
let output: U256 = functions::get_value::decode_output(&result_data)
@@ -226,7 +226,7 @@ fn deploy_contract_with_linking_library_should_succeed() {
226226

227227
let result_data = evm
228228
.ensure_funds()
229-
.call(functions::get_value_from_library::encode_input())
229+
.call(functions::get_value_from_library::encode_input(), None)
230230
.unwrap();
231231

232232
let output: U256 = functions::get_value_from_library::decode_output(&result_data)

0 commit comments

Comments
 (0)