|
@@ -15,8 +15,8 @@ fn simple() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("foo", &[], 0);
|
|
|
|
|
- let returns = vm.function("boom", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.constructor("foo", &[]);
|
|
|
|
|
+ let returns = vm.function("boom", &[], &[], None);
|
|
|
assert_eq!(returns, vec![Token::Int(U256::from(0)),]);
|
|
assert_eq!(returns, vec![Token::Int(U256::from(0)),]);
|
|
|
|
|
|
|
|
let mut vm = build_solidity(
|
|
let mut vm = build_solidity(
|
|
@@ -39,8 +39,8 @@ fn simple() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
- let returns = vm.function("func", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
+ let returns = vm.function("func", &[], &[], None);
|
|
|
assert_eq!(returns, vec![Token::Int(U256::from(1)),]);
|
|
assert_eq!(returns, vec![Token::Int(U256::from(1)),]);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -61,14 +61,14 @@ fn string() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("foo", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("foo", &[]);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..20].to_vec(),
|
|
vm.data()[0..20].to_vec(),
|
|
|
vec![65, 177, 160, 100, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0]
|
|
vec![65, 177, 160, 100, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::String(String::from(""))]);
|
|
assert_eq!(returns, vec![Token::String(String::from(""))]);
|
|
|
|
|
|
|
@@ -76,7 +76,6 @@ fn string() {
|
|
|
"set",
|
|
"set",
|
|
|
&[Token::String(String::from("Hello, World!"))],
|
|
&[Token::String(String::from("Hello, World!"))],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -87,7 +86,7 @@ fn string() {
|
|
|
|
|
|
|
|
assert_eq!(vm.data()[40..53].to_vec(), b"Hello, World!");
|
|
assert_eq!(vm.data()[40..53].to_vec(), b"Hello, World!");
|
|
|
|
|
|
|
|
- let returns = vm.function("get", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::String(String::from("Hello, World!"))]);
|
|
assert_eq!(returns, vec![Token::String(String::from("Hello, World!"))]);
|
|
|
|
|
|
|
@@ -97,11 +96,10 @@ fn string() {
|
|
|
"set",
|
|
"set",
|
|
|
&[Token::String(String::from("Hallo, Werld!"))],
|
|
&[Token::String(String::from("Hallo, Werld!"))],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::String(String::from("Hallo, Werld!"))]);
|
|
assert_eq!(returns, vec![Token::String(String::from("Hallo, Werld!"))]);
|
|
|
|
|
|
|
@@ -112,9 +110,9 @@ fn string() {
|
|
|
|
|
|
|
|
// Try setting this to an empty string. This is also a special case where
|
|
// Try setting this to an empty string. This is also a special case where
|
|
|
// the result should be offset 0
|
|
// the result should be offset 0
|
|
|
- vm.function("set", &[Token::String(String::from(""))], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("set", &[Token::String(String::from(""))], &[], None);
|
|
|
|
|
|
|
|
- let returns = vm.function("get", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::String(String::from(""))]);
|
|
assert_eq!(returns, vec![Token::String(String::from(""))]);
|
|
|
|
|
|
|
@@ -149,14 +147,14 @@ fn bytes() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..20].to_vec(),
|
|
vm.data()[0..20].to_vec(),
|
|
|
vec![11, 66, 182, 57, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0]
|
|
vec![11, 66, 182, 57, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("foo_length", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("foo_length", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::Uint(U256::from(0))]);
|
|
assert_eq!(returns, vec![Token::Uint(U256::from(0))]);
|
|
|
|
|
|
|
@@ -166,7 +164,6 @@ fn bytes() {
|
|
|
b"The shoemaker always wears the worst shoes".to_vec(),
|
|
b"The shoemaker always wears the worst shoes".to_vec(),
|
|
|
)],
|
|
)],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -179,13 +176,7 @@ fn bytes() {
|
|
|
.iter()
|
|
.iter()
|
|
|
.enumerate()
|
|
.enumerate()
|
|
|
{
|
|
{
|
|
|
- let returns = vm.function(
|
|
|
|
|
- "get_foo_offset",
|
|
|
|
|
- &[Token::Uint(U256::from(i))],
|
|
|
|
|
- &[],
|
|
|
|
|
- 0,
|
|
|
|
|
- None,
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ let returns = vm.function("get_foo_offset", &[Token::Uint(U256::from(i))], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec![*b])]);
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec![*b])]);
|
|
|
}
|
|
}
|
|
@@ -194,7 +185,6 @@ fn bytes() {
|
|
|
"set_foo_offset",
|
|
"set_foo_offset",
|
|
|
&[Token::Uint(U256::from(2)), Token::FixedBytes(b"E".to_vec())],
|
|
&[Token::Uint(U256::from(2)), Token::FixedBytes(b"E".to_vec())],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -202,7 +192,6 @@ fn bytes() {
|
|
|
"set_foo_offset",
|
|
"set_foo_offset",
|
|
|
&[Token::Uint(U256::from(7)), Token::FixedBytes(b"E".to_vec())],
|
|
&[Token::Uint(U256::from(7)), Token::FixedBytes(b"E".to_vec())],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -210,13 +199,7 @@ fn bytes() {
|
|
|
.iter()
|
|
.iter()
|
|
|
.enumerate()
|
|
.enumerate()
|
|
|
{
|
|
{
|
|
|
- let returns = vm.function(
|
|
|
|
|
- "get_foo_offset",
|
|
|
|
|
- &[Token::Uint(U256::from(i))],
|
|
|
|
|
- &[],
|
|
|
|
|
- 0,
|
|
|
|
|
- None,
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ let returns = vm.function("get_foo_offset", &[Token::Uint(U256::from(i))], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec![*b])]);
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec![*b])]);
|
|
|
}
|
|
}
|
|
@@ -248,13 +231,12 @@ fn bytes_set_subscript_range() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
vm.function(
|
|
vm.function(
|
|
|
"set_foo_offset",
|
|
"set_foo_offset",
|
|
|
&[Token::Uint(U256::from(0)), Token::FixedBytes(b"E".to_vec())],
|
|
&[Token::Uint(U256::from(0)), Token::FixedBytes(b"E".to_vec())],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
@@ -285,7 +267,7 @@ fn bytes_get_subscript_range() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
vm.function(
|
|
vm.function(
|
|
|
"set_foo",
|
|
"set_foo",
|
|
@@ -293,7 +275,6 @@ fn bytes_get_subscript_range() {
|
|
|
b"The shoemaker always wears the worst shoes".to_vec(),
|
|
b"The shoemaker always wears the worst shoes".to_vec(),
|
|
|
)],
|
|
)],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
@@ -301,7 +282,6 @@ fn bytes_get_subscript_range() {
|
|
|
"get_foo_offset",
|
|
"get_foo_offset",
|
|
|
&[Token::Uint(U256::from(0x80000000u64))],
|
|
&[Token::Uint(U256::from(0x80000000u64))],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
@@ -319,7 +299,7 @@ fn storage_alignment() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..40].to_vec(),
|
|
vm.data()[0..40].to_vec(),
|
|
@@ -351,31 +331,31 @@ fn bytes_push_pop() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_bs", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_bs", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0xda))]);
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0xda))]);
|
|
|
|
|
|
|
|
- let returns = vm.function("pop", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("pop", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec!(0xda))]);
|
|
assert_eq!(returns, vec![Token::FixedBytes(vec!(0xda))]);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_bs", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_bs", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e))]);
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e))]);
|
|
|
|
|
|
|
|
- vm.function("push", &[Token::FixedBytes(vec![0x41])], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("push", &[Token::FixedBytes(vec![0x41])], &[], None);
|
|
|
|
|
|
|
|
println!("data:{}", hex::encode(&vm.data()));
|
|
println!("data:{}", hex::encode(&vm.data()));
|
|
|
|
|
|
|
|
- let returns = vm.function("get_bs", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_bs", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0x41))]);
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0x41))]);
|
|
|
|
|
|
|
|
- vm.function("push", &[Token::FixedBytes(vec![0x01])], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("push", &[Token::FixedBytes(vec![0x01])], &[], None);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_bs", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_bs", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0x41, 0x01))]);
|
|
assert_eq!(returns, vec![Token::Bytes(vec!(0x0e, 0x41, 0x01))]);
|
|
|
}
|
|
}
|
|
@@ -394,9 +374,9 @@ fn bytes_empty_pop() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- vm.function("pop", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("pop", &[], &[], None);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
@@ -426,9 +406,9 @@ fn simple_struct() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- vm.function("set_s2", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("set_s2", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..32].to_vec(),
|
|
vm.data()[0..32].to_vec(),
|
|
@@ -438,7 +418,7 @@ fn simple_struct() {
|
|
|
]
|
|
]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -455,11 +435,10 @@ fn simple_struct() {
|
|
|
Token::Uint(U256::from(3240121)),
|
|
Token::Uint(U256::from(3240121)),
|
|
|
])],
|
|
])],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -503,9 +482,9 @@ fn struct_in_struct() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- vm.function("set_s2", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("set_s2", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..52].to_vec(),
|
|
vm.data()[0..52].to_vec(),
|
|
@@ -516,7 +495,7 @@ fn struct_in_struct() {
|
|
|
]
|
|
]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -541,11 +520,10 @@ fn struct_in_struct() {
|
|
|
Token::Uint(U256::from(12345678901234567890u64)),
|
|
Token::Uint(U256::from(12345678901234567890u64)),
|
|
|
])],
|
|
])],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -588,9 +566,9 @@ fn string_in_struct() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- vm.function("set_s2", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("set_s2", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
vm.data()[0..64].to_vec(),
|
|
vm.data()[0..64].to_vec(),
|
|
@@ -601,7 +579,7 @@ fn string_in_struct() {
|
|
|
]
|
|
]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -620,11 +598,10 @@ fn string_in_struct() {
|
|
|
Token::Uint(U256::from(12345678901234567890u64)),
|
|
Token::Uint(U256::from(12345678901234567890u64)),
|
|
|
])],
|
|
])],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -688,11 +665,11 @@ fn complex_struct() {
|
|
|
}"#,
|
|
}"#,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.constructor("c", &[], 0);
|
|
|
|
|
|
|
+ vm.constructor("c", &[]);
|
|
|
|
|
|
|
|
- vm.function("set_s2", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("set_s2", &[], &[], None);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -737,11 +714,10 @@ fn complex_struct() {
|
|
|
Token::String(String::from("yadayada")),
|
|
Token::String(String::from("yadayada")),
|
|
|
],
|
|
],
|
|
|
&[],
|
|
&[],
|
|
|
- 0,
|
|
|
|
|
None,
|
|
None,
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|
|
@@ -764,9 +740,9 @@ fn complex_struct() {
|
|
|
]
|
|
]
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- vm.function("rm", &[], &[], 0, None);
|
|
|
|
|
|
|
+ vm.function("rm", &[], &[], None);
|
|
|
|
|
|
|
|
- let returns = vm.function("get_s1", &[], &[], 0, None);
|
|
|
|
|
|
|
+ let returns = vm.function("get_s1", &[], &[], None);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
assert_eq!(
|
|
|
returns,
|
|
returns,
|