nwaku/tests/common/test_enr_builder.nim

127 lines
3.4 KiB
Nim
Raw Normal View History

2023-03-10 01:33:52 +01:00
{.used.}
import std/options, stew/results, stew/shims/net, testutils/unittests
import waku/common/enr, ../testlib/wakucore
2023-03-10 01:33:52 +01:00
suite "nim-eth ENR - builder and typed record":
2023-03-10 01:33:52 +01:00
test "Non-supported private key (ECDSA)":
## Given
let privateKey = generateEcdsaKey()
## Then
expect Defect:
discard EnrBuilder.init(privateKey)
test "Supported private key (Secp256k1)":
let
seqNum = 1u64
privateKey = generateSecp256k1Key()
let expectedPubKey = privateKey.getPublicKey().get().getRawBytes().get()
## When
var builder = EnrBuilder.init(privateKey, seqNum)
let enrRes = builder.build()
## Then
check enrRes.isOk()
let record = enrRes.tryGet().toTyped().get()
let id = record.id
2023-03-10 01:33:52 +01:00
check:
id == some(RecordId.V4)
let publicKey = record.secp256k1
check:
publicKey.isSome()
@(publicKey.get()) == expectedPubKey
2023-03-10 01:33:52 +01:00
suite "nim-eth ENR - Ext: IP address and TCP/UDP ports":
2023-03-10 01:33:52 +01:00
test "EIP-778 test vector":
## Given
# Test vector from EIP-778
# See: https://eips.ethereum.org/EIPS/eip-778#test-vectors
let expectedEnr =
"-IS4QHCYrYZbAKWCBRlAy5zzaDZXJBGkcnh4MHcBFZntXNFrdvJjX04j" &
"RzjzCBOonrkTfj499SZuOh8R33Ls8RRcy5wBgmlkgnY0gmlwhH8AAAGJ" &
"c2VjcDI1NmsxoQPKY0yuDUmstAHYpMa2_oxVtw0RW_QAdpzBQA8yWM0x" & "OIN1ZHCCdl8"
2023-03-10 01:33:52 +01:00
let
seqNum = 1u64
privateKey = ethSecp256k1Key(
"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"
)
2023-03-10 01:33:52 +01:00
enrIpAddr = parseIpAddress("127.0.0.1")
2023-03-10 01:33:52 +01:00
enrUdpPort = Port(30303)
## When
var builder = EnrBuilder.init(privateKey, seqNum)
builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), udpPort = some(enrUdpPort))
2023-03-10 01:33:52 +01:00
let enrRes = builder.build()
## Then
check enrRes.isOk()
let record = enrRes.tryGet().toBase64()
check:
record == expectedEnr
test "IPv4 and TCP port":
let
seqNum = 1u64
privateKey = generateSecp256k1Key()
enrIpAddr = parseIpAddress("127.0.0.1")
2023-03-10 01:33:52 +01:00
enrTcpPort = Port(30301)
let expectedPubKey = privateKey.getPublicKey().get().getRawBytes().get()
## When
var builder = EnrBuilder.init(privateKey, seqNum)
builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), tcpPort = some(enrTcpPort))
2023-03-10 01:33:52 +01:00
let enrRes = builder.build()
## Then
check enrRes.isOk()
let record = enrRes.tryGet().toTyped().get()
2023-03-10 01:33:52 +01:00
check:
@(record.secp256k1.get()) == expectedPubKey
record.ip == some(enrIpAddr.address_v4)
record.tcp == some(enrTcpPort.uint16)
record.udp == none(uint16)
record.ip6 == none(array[16, byte])
2023-03-10 01:33:52 +01:00
test "IPv6 and UDP port":
let
seqNum = 1u64
privateKey = generateSecp256k1Key()
enrIpAddr = parseIpAddress("::1")
2023-03-10 01:33:52 +01:00
enrUdpPort = Port(30301)
let expectedPubKey = privateKey.getPublicKey().get().getRawBytes().get()
## When
var builder = EnrBuilder.init(privateKey, seqNum)
builder.withIpAddressAndPorts(ipAddr = some(enrIpAddr), udpPort = some(enrUdpPort))
2023-03-10 01:33:52 +01:00
let enrRes = builder.build()
## Then
check enrRes.isOk()
let record = enrRes.tryGet().toTyped().get()
2023-03-10 01:33:52 +01:00
check:
@(record.secp256k1.get()) == expectedPubKey
record.ip == none(array[4, byte])
record.tcp == none(uint16)
2023-03-10 01:33:52 +01:00
record.ip6 == some(enrIpAddr.address_v6)
record.tcp6 == none(uint16)
record.udp6 == some(enrUdpPort.uint16)
chore: bump dependencies for v0.35 (#3255) Changes: modified: .gitmodules modified: tests/waku_discv5/utils.nim modified: tests/waku_enr/utils.nim modified: tests/waku_rln_relay/test_rln_group_manager_onchain.nim modified: tests/waku_rln_relay/utils.nim modified: tests/waku_rln_relay/utils_onchain.nim modified: vendor/nim-chronicles modified: vendor/nim-eth modified: vendor/nim-http-utils modified: vendor/nim-json-rpc modified: vendor/nim-json-serialization modified: vendor/nim-libp2p - 1.8.0! modified: vendor/nim-metrics new file: vendor/nim-minilru modified: vendor/nim-nat-traversal modified: vendor/nim-presto modified: vendor/nim-secp256k1 modified: vendor/nim-serialization modified: vendor/nim-stew modified: vendor/nim-taskpools modified: vendor/nim-testutils modified: vendor/nim-toml-serialization modified: vendor/nim-unicodedb modified: vendor/nim-unittest2 modified: vendor/nim-web3 - from distinct branch that solves Ethereum ABI issue. modified: vendor/nim-websock modified: vendor/nim-zlib modified: vendor/nimcrypto modified: waku.nimble modified: waku/common/enr/builder.nim modified: waku/common/enr/typed_record.nim modified: waku/common/utils/nat.nim modified: waku/discovery/waku_discv5.nim modified: waku/waku_rln_relay/conversion_utils.nim modified: waku/waku_rln_relay/group_manager/on_chain/group_manager.nim modified: waku/waku_rln_relay/rln/wrappers.nim modified: waku/waku_rln_relay/rln_relay.nim * Eliminate C compilation issue with chat2bridge due to an overcomplicating import from json_rpc instead of using std/json * Adapt ENR Record handling to new interface of nim-eth * Fix chrash in group_manager on_chain * Fix signature of register and MemberRegister to UInt256, check transaction success in register * Upgrade json-rpc and serialization * Update to match latest enr and nat interface * Using of extracted result of contract macro - with necessary adaption * Bump nim-chornicles, nim-libp2p, nimcrypto * Bump nim-web3, nim-eth and deps - on_chain/group_manager.nim adaption * Added status-im/nim-minilru submodule required by latest nim-eth Fixing tests. * group_manager: adapt smart contract param types * update web3 vendor * bump vendors for v0.35.0 * protobuf.nim: fix compilation error after nim-libp2p bump * changes to make it compile after rebase from master --------- Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com>
2025-01-28 10:04:34 +01:00
record.udp == some(enrUdpPort.uint16)