Storage
Result for a simple storage IO.
Have to say Vyper
is super on this even it contains the logic of function
selector!
Gas Cost
Zink | Vyper@0.3.9 | Solidity@0.8.21 |
---|---|---|
22237 | 22345 | 27738 |
The gas costs here are measured by transaction cost
+ execution cost
,
for example, the transaction of this function in solidity is 24120
, and
2916
for the execution cost, 27738
in total.
Since revm doesn’t support this and we haven’t implemented the constructor yet, we don’t have the separated costs for zink for now ))
Issues: zink-lang/zink#102, bluealloy/revm#619
Runtime Code
zink | vyper | solidity |
---|---|---|
42 | 204 | 724 |
zink
/// TODO: generate this storage interface with proc macro.
struct Counter;
impl Counter {
fn get() -> i64 {
unsafe { sload(0) }
}
fn set(value: i64) {
unsafe { sstore(0, value) }
}
}
/// Set value to the storage and get it.
#[no_mangle]
pub unsafe extern "C" fn set_and_get(value: i64) -> i64 {
Counter::set(value);
Counter::get()
}
6000600035589155600058905460005260206000f3
vyper
n: public(int256)
@external
def sg(_n: int256) -> int256:
self.n = _n
return self.n
6003361161000c57610051565b5f3560e01c3461005557632e52d606811861002c575f5460405260206040f35b63da48b556811861004f5760243610610055576004355f555f5460405260206040f35b505b5f5ffd5b5f80fda165767970657283000309000b
solidity
pragma solidity >=0.7.0 <0.9.0;
contract Storage {
int public number;
function sg(int n) public returns (int) {
number = n;
return number;
}
}
608060405234801561001057600080fd5b50600436106100365760003560e01c80638381f58a1461003b578063da48b55614610059575b600080fd5b610043610089565b60405161005091906100bb565b60405180910390f35b610073600480360381019061006e9190610107565b61008f565b60405161008091906100bb565b60405180910390f35b60005481565b6000816000819055506000549050919050565b6000819050919050565b6100b5816100a2565b82525050565b60006020820190506100d060008301846100ac565b92915050565b600080fd5b6100e4816100a2565b81146100ef57600080fd5b50565b600081359050610101816100db565b92915050565b60006020828403121561011d5761011c6100d6565b5b600061012b848285016100f2565b9150509291505056fea264697066735822122052e14a565911c984f75788fb539e44d7692065628b2042665fc4abfc95e680d264736f6c63430008120033