Add initial contract macro benchmarks (#9600)

* Add erc20 benchmarks

* Fix typos

Co-authored-by: Michael Müller <michi@parity.io>

* Fix compilation issue on case sensitive fs

Co-authored-by: Michael Müller <michi@parity.io>
This commit is contained in:
Alexander Theißen
2021-09-06 13:30:28 +02:00
committed by GitHub
parent 61941f2806
commit 13f3e25ebb
8 changed files with 1560 additions and 13 deletions
@@ -0,0 +1,9 @@
# Benchmarks
This directory contains real world (ink!, solang) contracts which are used in macro benchmarks.
Those benchmarks are not used to determine weights but rather to compare different contract
languages and execution engines with larger wasm modules.
Files in this directory are used by `#[extra]` benchmarks in `src/benchmarking`. The json
files are for informational purposes only and are not consumed by the benchmarks.
@@ -0,0 +1,819 @@
{
"metadataVersion": "0.1.0",
"source": {
"hash": "0x6be8492017fe96b7a92bb39b4ede04b96effb8fcaf9237bfdccef7d9e732c760",
"language": "ink! 3.0.0-rc4",
"compiler": "rustc 1.56.0-nightly"
},
"contract": {
"name": "erc20",
"version": "3.0.0-rc4",
"authors": [
"Parity Technologies <admin@parity.io>"
]
},
"spec": {
"constructors": [
{
"args": [
{
"name": "initial_supply",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
"Creates a new ERC-20 contract with the specified initial supply."
],
"name": [
"new"
],
"selector": "0x9bae9d5e"
}
],
"docs": [],
"events": [
{
"args": [
{
"docs": [],
"indexed": true,
"name": "from",
"type": {
"displayName": [
"Option"
],
"type": 15
}
},
{
"docs": [],
"indexed": true,
"name": "to",
"type": {
"displayName": [
"Option"
],
"type": 15
}
},
{
"docs": [],
"indexed": false,
"name": "value",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
" Event emitted when a token transfer occurs."
],
"name": "Transfer"
},
{
"args": [
{
"docs": [],
"indexed": true,
"name": "owner",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"docs": [],
"indexed": true,
"name": "spender",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"docs": [],
"indexed": false,
"name": "value",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
" Event emitted when an approval occurs that `spender` is allowed to withdraw",
" up to the amount of `value` tokens from `owner`."
],
"name": "Approval"
}
],
"messages": [
{
"args": [],
"docs": [
" Returns the total token supply."
],
"mutates": false,
"name": [
"total_supply"
],
"payable": false,
"returnType": {
"displayName": [
"Balance"
],
"type": 1
},
"selector": "0xdb6375a8"
},
{
"args": [
{
"name": "owner",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
}
],
"docs": [
" Returns the account balance for the specified `owner`.",
"",
" Returns `0` if the account is non-existent."
],
"mutates": false,
"name": [
"balance_of"
],
"payable": false,
"returnType": {
"displayName": [
"Balance"
],
"type": 1
},
"selector": "0x0f755a56"
},
{
"args": [
{
"name": "owner",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"name": "spender",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
}
],
"docs": [
" Returns the amount which `spender` is still allowed to withdraw from `owner`.",
"",
" Returns `0` if no allowance has been set `0`."
],
"mutates": false,
"name": [
"allowance"
],
"payable": false,
"returnType": {
"displayName": [
"Balance"
],
"type": 1
},
"selector": "0x6a00165e"
},
{
"args": [
{
"name": "to",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"name": "value",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
" Transfers `value` amount of tokens from the caller's account to account `to`.",
"",
" On success a `Transfer` event is emitted.",
"",
" # Errors",
"",
" Returns `InsufficientBalance` error if there are not enough tokens on",
" the caller's account balance."
],
"mutates": true,
"name": [
"transfer"
],
"payable": false,
"returnType": {
"displayName": [
"Result"
],
"type": 12
},
"selector": "0x84a15da1"
},
{
"args": [
{
"name": "spender",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"name": "value",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
" Allows `spender` to withdraw from the caller's account multiple times, up to",
" the `value` amount.",
"",
" If this function is called again it overwrites the current allowance with `value`.",
"",
" An `Approval` event is emitted."
],
"mutates": true,
"name": [
"approve"
],
"payable": false,
"returnType": {
"displayName": [
"Result"
],
"type": 12
},
"selector": "0x681266a0"
},
{
"args": [
{
"name": "from",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"name": "to",
"type": {
"displayName": [
"AccountId"
],
"type": 5
}
},
{
"name": "value",
"type": {
"displayName": [
"Balance"
],
"type": 1
}
}
],
"docs": [
" Transfers `value` tokens on the behalf of `from` to the account `to`.",
"",
" This can be used to allow a contract to transfer tokens on ones behalf and/or",
" to charge fees in sub-currencies, for example.",
"",
" On success a `Transfer` event is emitted.",
"",
" # Errors",
"",
" Returns `InsufficientAllowance` error if there are not enough tokens allowed",
" for the caller to withdraw from `from`.",
"",
" Returns `InsufficientBalance` error if there are not enough tokens on",
" the account balance of `from`."
],
"mutates": true,
"name": [
"transfer_from"
],
"payable": false,
"returnType": {
"displayName": [
"Result"
],
"type": 12
},
"selector": "0x0b396f18"
}
]
},
"storage": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0000000000000000000000000000000000000000000000000000000000000000",
"ty": 1
}
},
"name": "total_supply"
},
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0100000000000000000000000000000000000000000000000000000000000000",
"ty": 2
}
},
"name": "header"
},
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0200000000000000000000000000000000000000000000000000000000000000",
"ty": 3
}
},
"name": "len"
},
{
"layout": {
"array": {
"cellsPerElem": 1,
"layout": {
"cell": {
"key": "0x0200000001000000000000000000000000000000000000000000000000000000",
"ty": 4
}
},
"len": 4294967295,
"offset": "0x0300000000000000000000000000000000000000000000000000000000000000"
}
},
"name": "elems"
}
]
}
},
"name": "entries"
}
]
}
},
"name": "keys"
},
{
"layout": {
"hash": {
"layout": {
"cell": {
"key": "0x0300000001000000000000000000000000000000000000000000000000000000",
"ty": 9
}
},
"offset": "0x0200000001000000000000000000000000000000000000000000000000000000",
"strategy": {
"hasher": "Blake2x256",
"postfix": "",
"prefix": "0x696e6b20686173686d6170"
}
}
},
"name": "values"
}
]
}
},
"name": "balances"
},
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0300000001000000000000000000000000000000000000000000000000000000",
"ty": 2
}
},
"name": "header"
},
{
"layout": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0400000001000000000000000000000000000000000000000000000000000000",
"ty": 3
}
},
"name": "len"
},
{
"layout": {
"array": {
"cellsPerElem": 1,
"layout": {
"cell": {
"key": "0x0400000002000000000000000000000000000000000000000000000000000000",
"ty": 10
}
},
"len": 4294967295,
"offset": "0x0500000001000000000000000000000000000000000000000000000000000000"
}
},
"name": "elems"
}
]
}
},
"name": "entries"
}
]
}
},
"name": "keys"
},
{
"layout": {
"hash": {
"layout": {
"cell": {
"key": "0x0500000002000000000000000000000000000000000000000000000000000000",
"ty": 9
}
},
"offset": "0x0400000002000000000000000000000000000000000000000000000000000000",
"strategy": {
"hasher": "Blake2x256",
"postfix": "",
"prefix": "0x696e6b20686173686d6170"
}
}
},
"name": "values"
}
]
}
},
"name": "allowances"
}
]
}
},
"types": [
{
"def": {
"primitive": "u128"
}
},
{
"def": {
"composite": {
"fields": [
{
"name": "last_vacant",
"type": 3,
"typeName": "Index"
},
{
"name": "len",
"type": 3,
"typeName": "u32"
},
{
"name": "len_entries",
"type": 3,
"typeName": "u32"
}
]
}
},
"path": [
"ink_storage",
"collections",
"stash",
"Header"
]
},
{
"def": {
"primitive": "u32"
}
},
{
"def": {
"variant": {
"variants": [
{
"fields": [
{
"type": 8,
"typeName": "VacantEntry"
}
],
"name": "Vacant"
},
{
"fields": [
{
"type": 5,
"typeName": "T"
}
],
"name": "Occupied"
}
]
}
},
"params": [
5
],
"path": [
"ink_storage",
"collections",
"stash",
"Entry"
]
},
{
"def": {
"composite": {
"fields": [
{
"type": 6,
"typeName": "[u8; 32]"
}
]
}
},
"path": [
"ink_env",
"types",
"AccountId"
]
},
{
"def": {
"array": {
"len": 32,
"type": 7
}
}
},
{
"def": {
"primitive": "u8"
}
},
{
"def": {
"composite": {
"fields": [
{
"name": "next",
"type": 3,
"typeName": "Index"
},
{
"name": "prev",
"type": 3,
"typeName": "Index"
}
]
}
},
"path": [
"ink_storage",
"collections",
"stash",
"VacantEntry"
]
},
{
"def": {
"composite": {
"fields": [
{
"name": "value",
"type": 1,
"typeName": "V"
},
{
"name": "key_index",
"type": 3,
"typeName": "KeyIndex"
}
]
}
},
"params": [
1
],
"path": [
"ink_storage",
"collections",
"hashmap",
"ValueEntry"
]
},
{
"def": {
"variant": {
"variants": [
{
"fields": [
{
"type": 8,
"typeName": "VacantEntry"
}
],
"name": "Vacant"
},
{
"fields": [
{
"type": 11,
"typeName": "T"
}
],
"name": "Occupied"
}
]
}
},
"params": [
11
],
"path": [
"ink_storage",
"collections",
"stash",
"Entry"
]
},
{
"def": {
"tuple": [
5,
5
]
}
},
{
"def": {
"variant": {
"variants": [
{
"fields": [
{
"type": 13,
"typeName": "T"
}
],
"name": "Ok"
},
{
"fields": [
{
"type": 14,
"typeName": "E"
}
],
"name": "Err"
}
]
}
},
"params": [
13,
14
],
"path": [
"Result"
]
},
{
"def": {
"tuple": []
}
},
{
"def": {
"variant": {
"variants": [
{
"discriminant": 0,
"name": "InsufficientBalance"
},
{
"discriminant": 1,
"name": "InsufficientAllowance"
}
]
}
},
"path": [
"erc20",
"erc20",
"Error"
]
},
{
"def": {
"variant": {
"variants": [
{
"name": "None"
},
{
"fields": [
{
"type": 5,
"typeName": "T"
}
],
"name": "Some"
}
]
}
},
"params": [
5
],
"path": [
"Option"
]
}
]
}
Binary file not shown.
@@ -0,0 +1,581 @@
{
"contract": {
"authors": [
"unknown"
],
"name": "ERC20PresetFixedSupply",
"version": "0.0.1"
},
"metadataVersion": "0.1.0",
"source": {
"compiler": "solang 0.1.7",
"hash": "0x9c55e342566e89c741eb641eec3af796836da750fc930c55bccc0604a47ef700",
"language": "Solidity 0.1.7"
},
"spec": {
"constructors": [
{
"args": [
{
"name": "name",
"type": {
"display_name": [
"String"
],
"type": 2
}
},
{
"name": "symbol",
"type": {
"display_name": [
"String"
],
"type": 2
}
},
{
"name": "initialSupply",
"type": {
"display_name": [
"u256"
],
"type": 1
}
},
{
"name": "owner",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
}
],
"docs": [
""
],
"name": "new",
"selector": "0xa6f1f5e1"
}
],
"events": [
{
"args": [
{
"indexed": true,
"name": "owner",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"indexed": true,
"name": "spender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"indexed": false,
"name": "value",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"name": "Approval"
},
{
"args": [
{
"indexed": true,
"name": "from",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"indexed": true,
"name": "to",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"indexed": false,
"name": "value",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"name": "Transfer"
}
],
"messages": [
{
"args": [
{
"name": "account",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "amount",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "burnFrom",
"payable": false,
"return_type": null,
"selector": "0x0f1354f3"
},
{
"args": [
{
"name": "account",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
}
],
"docs": [
""
],
"mutates": false,
"name": "balanceOf",
"payable": false,
"return_type": {
"display_name": [
"u256"
],
"type": 1
},
"selector": "0x6c7f1542"
},
{
"args": [],
"docs": [
""
],
"mutates": false,
"name": "totalSupply",
"payable": false,
"return_type": {
"display_name": [
"u256"
],
"type": 1
},
"selector": "0x18160ddd"
},
{
"args": [],
"docs": [
""
],
"mutates": false,
"name": "decimals",
"payable": false,
"return_type": {
"display_name": [
"u8"
],
"type": 3
},
"selector": "0x313ce567"
},
{
"args": [
{
"name": "owner",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "spender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
}
],
"docs": [
""
],
"mutates": false,
"name": "allowance",
"payable": false,
"return_type": {
"display_name": [
"u256"
],
"type": 1
},
"selector": "0xf2a9a8c7"
},
{
"args": [],
"docs": [
""
],
"mutates": false,
"name": "name",
"payable": false,
"return_type": {
"display_name": [
"String"
],
"type": 2
},
"selector": "0x06fdde03"
},
{
"args": [
{
"name": "spender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "subtractedValue",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "decreaseAllowance",
"payable": false,
"return_type": {
"display_name": [
"bool"
],
"type": 6
},
"selector": "0x4b76697b"
},
{
"args": [
{
"name": "sender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "recipient",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "amount",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "transferFrom",
"payable": false,
"return_type": {
"display_name": [
"bool"
],
"type": 6
},
"selector": "0x2fb840f5"
},
{
"args": [],
"docs": [
""
],
"mutates": false,
"name": "symbol",
"payable": false,
"return_type": {
"display_name": [
"String"
],
"type": 2
},
"selector": "0x95d89b41"
},
{
"args": [
{
"name": "spender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "addedValue",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "increaseAllowance",
"payable": false,
"return_type": {
"display_name": [
"bool"
],
"type": 6
},
"selector": "0xb936c899"
},
{
"args": [
{
"name": "recipient",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "amount",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "transfer",
"payable": false,
"return_type": {
"display_name": [
"bool"
],
"type": 6
},
"selector": "0x6a467394"
},
{
"args": [
{
"name": "spender",
"type": {
"display_name": [
"AccountId"
],
"type": 5
}
},
{
"name": "amount",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "approve",
"payable": false,
"return_type": {
"display_name": [
"bool"
],
"type": 6
},
"selector": "0x47144421"
},
{
"args": [
{
"name": "amount",
"type": {
"display_name": [
"u256"
],
"type": 1
}
}
],
"docs": [
""
],
"mutates": true,
"name": "burn",
"payable": false,
"return_type": null,
"selector": "0x42966c68"
}
]
},
"storage": {
"struct": {
"fields": [
{
"layout": {
"cell": {
"key": "0x0000000000000000000000000000000000000000000000000000000000000002",
"ty": 1
}
},
"name": "_totalSupply"
},
{
"layout": {
"cell": {
"key": "0x0000000000000000000000000000000000000000000000000000000000000003",
"ty": 2
}
},
"name": "_name"
},
{
"layout": {
"cell": {
"key": "0x0000000000000000000000000000000000000000000000000000000000000004",
"ty": 2
}
},
"name": "_symbol"
}
]
}
},
"types": [
{
"def": {
"primitive": "u256"
}
},
{
"def": {
"primitive": "str"
}
},
{
"def": {
"primitive": "u8"
}
},
{
"def": {
"array": {
"len": 32,
"type": 3
}
}
},
{
"def": {
"composite": {
"fields": [
{
"type": 4
}
]
}
},
"path": [
"AccountId"
]
},
{
"def": {
"primitive": "bool"
}
}
]
}