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

ZinkVyper@0.3.9Solidity@0.8.21
222372234527738

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

zinkvypersolidity
42204724

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