Calculate Event topic
This commit is contained in:
parent
a2b8daa320
commit
0c3dca0aa1
|
@ -8,12 +8,16 @@ export address
|
|||
export stint
|
||||
|
||||
type FunctionSelector* = distinct array[4, byte]
|
||||
type EventTopic* = distinct array[32, byte]
|
||||
|
||||
proc toArray*(selector: FunctionSelector): array[4, byte] =
|
||||
array[4, byte](selector)
|
||||
|
||||
proc `$`*(selector: FunctionSelector): string =
|
||||
"0x" & selector.toArray.toHex
|
||||
proc toArray*(topic: EventTopic): array[32, byte] =
|
||||
array[32, byte](topic)
|
||||
|
||||
proc `$`*(value: FunctionSelector | EventTopic): string =
|
||||
"0x" & value.toArray.toHex
|
||||
|
||||
template solidityType(T: type, s: string) =
|
||||
func solidityType*(_: type T): string = s
|
||||
|
@ -64,3 +68,6 @@ func selector*(function: string, parameters: type tuple): FunctionSelector =
|
|||
var selector: array[4, byte]
|
||||
selector[0..<4] = hash[0..<4]
|
||||
FunctionSelector(selector)
|
||||
|
||||
func topic*(event: string, parameters: type tuple): EventTopic =
|
||||
EventTopic(hash(signature(event, parameters)))
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import std/unittest
|
||||
import pkg/contractabi/selector
|
||||
import pkg/stew/byteutils
|
||||
import pkg/contractabi
|
||||
|
||||
suite "function selector":
|
||||
|
||||
|
@ -29,3 +30,8 @@ suite "function selector":
|
|||
test "calculates solidity function selector":
|
||||
check $selector("transfer", (Address, UInt256)) == "0xa9059cbb"
|
||||
check $selector("transferFrom", (Address, Address, UInt256)) == "0x23b872dd"
|
||||
|
||||
test "calculates solidity event topic":
|
||||
let expected = "0xddf252ad1be2c89b69c2b068fc378daa" &
|
||||
"952ba7f163c4a11628f55a4df523b3ef"
|
||||
check $topic("Transfer", (Address, Address, UInt256)) == expected
|
||||
|
|
Loading…
Reference in New Issue