# 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][102], [bluealloy/revm#619][619]
### Runtime Code
| zink | vyper | solidity |
| ---- | ----- | -------- |
| 42 | 204 | 724 |
## `zink`
```rust
/// 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`
```python
n: public(int256)
@external
def sg(_n: int256) -> int256:
self.n = _n
return self.n
```
```
6003361161000c57610051565b5f3560e01c3461005557632e52d606811861002c575f5460405260206040f35b63da48b556811861004f5760243610610055576004355f555f5460405260206040f35b505b5f5ffd5b5f80fda165767970657283000309000b
```
## `solidity`
```sol
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
```
[102]: https://github.com/zink-lang/zink/issues/102
[104]: https://github.com/zink-lang/zink/issues/104
[619]: https://github.com/bluealloy/revm/issues/619