-
Notifications
You must be signed in to change notification settings - Fork 126
Description
EVM supports 256-bit operations "natively". While that precision is not needed in a lot of cases it does come as very useful for certain operations, such as handling token balances, in Ethereum.
With wasm one would need to include a bignumber library to do that, potentially in a lot of contracts. This suggests a good opportunity to define a standard bignumber library, which can be used by contracts, but it is not mandatory to be used.
Due to the design of "host" functions in wasm (having a separation of namespaces) it is possible to design this in a forward compatible manner, but implement it right now in the clients, such as Hera.
Lets define a new namespace stdbn (jk, bignum or stdbignum) with the following
mul256(a: i32ptr, b: i32ptr, out: i32ptr)mulmod256(a: i32ptr, b: i32ptr, mod: i32ptr, out: i32ptr)- others TBD
All of the arguments are 32-bit pointers to a memory location containing a 256-bit little endian number. The pointers can overlap or be the same.
In the future this could also be implemented as a (system) library: #17.
The main benefit of a "system library" is the predefined address it lives at and the client's ability to make a decision whether it uses a wasm blob or implements it natively.