{"id":18683014,"url":"https://github.com/numbersprotocol/numbers-network","last_synced_at":"2026-02-06T03:30:59.197Z","repository":{"id":65081913,"uuid":"541975479","full_name":"numbersprotocol/numbers-network","owner":"numbersprotocol","description":null,"archived":false,"fork":false,"pushed_at":"2026-01-19T11:22:54.000Z","size":252,"stargazers_count":1,"open_issues_count":11,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-19T18:12:21.522Z","etag":null,"topics":["num"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/numbersprotocol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-27T08:15:50.000Z","updated_at":"2026-01-19T11:22:57.000Z","dependencies_parsed_at":"2023-02-16T21:30:55.766Z","dependency_job_id":"799f8474-23b7-4908-baf3-f12636741c9e","html_url":"https://github.com/numbersprotocol/numbers-network","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/numbersprotocol/numbers-network","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numbersprotocol%2Fnumbers-network","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numbersprotocol%2Fnumbers-network/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numbersprotocol%2Fnumbers-network/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numbersprotocol%2Fnumbers-network/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/numbersprotocol","download_url":"https://codeload.github.com/numbersprotocol/numbers-network/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/numbersprotocol%2Fnumbers-network/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29148089,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T02:39:25.012Z","status":"ssl_error","status_checked_at":"2026-02-06T02:37:22.784Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["num"],"created_at":"2024-11-07T10:13:30.131Z","updated_at":"2026-02-06T03:30:59.178Z","avatar_url":"https://github.com/numbersprotocol.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Numbers Network\n\nNumbers Network is dedicated to preserving digital media provenance and related applications. Numbers Network is EVM-compatible, and developers familiar with Ethereum ecosystem can run their applications easily.\n\n- [Numbers Network](#numbers-network)\n  - [Mainnet: Jade (玉)](#mainnet-jade-玉)\n  - [Testnet: Snow (雪)](#testnet-snow-雪)\n- [Avalanche Subnets](#avalanche-subnets)\n  - [Concepts](#concepts)\n  - [Launch Node (avalanchego)](#launch-node-avalanchego)\n  - [Create a Subnet](#create-a-subnet)\n  - [Add Validator to Subnet](#add-validator-to-subnet)\n  - [Renew Validator](#renew-validator)\n  - [Import Existing L1 in Avalanche CLI](#import-existing-l1-in-avalanche-cli)\n    - [BLS Public Key and BLS Signature](#bls-public-key-and-bls-signature)\n  - [RPC](#rpc)\n    - [Set RPC](#set-rpc)\n    - [Test RPC](#test-rpc)\n  - [Upgrade Node (avalanchego)](#upgrade-node-avalanchego)\n  - [Update subnet-evm](#update-subnet-evm)\n  - [Updating Utilities](#updating-utilities)\n  - [Network Upgrades: Enable/Disable Precompiles](#network-upgrades-enabledisable-precompiles)\n  - [Customize Subnet and EVM](#customize-subnet-and-evm)\n  - [Precompile: Minting Native Coins](#precompile-minting-native-coins)\n    - [Check Minting Amount](#check-minting-amount)\n  - [Precompile: Configuring dynamic fees](#precompile-configuring-dynamic-fees)\n  - [Precompile: Restricting Smart Contract Deployers](#precompile-restricting-smart-contract-deployers)\n  - [Interoperability](#interoperability)\n  - [Admin](#admin)\n    - [Confirm Updated Node Is Working](#confirm-updated-node-is-working)\n    - [Confirm Node Is Working](#confirm-node-is-working)\n- [HTTPS RPC Provider](#https-rpc-provider)\n- [Websocket RPC Provider](#websocket-rpc-provider)\n- [Self-Hosted Faucet](#self-hosted-faucet)\n- [Wrapped NUM](#wrapped-num)\n- [Bridge](#bridge)\n- [Archieve Node](#archieve-node)\n\n## Mainnet: Jade (玉)\n\nAdd Network to MetaMask, [one-click by Chainlist](https://chainlist.org/chain/10507)\n\n1. Network Name: Numbers Jade\n2. New RPC URL: https://mainnetrpc.num.network\n3. Chain ID: 10507\n4. Currency Symbol: NUM\n5. Block Explorer URL: https://mainnet.num.network\n6. Websocket RPC URL: wss://mainnetrpc.num.network/ws\n7. Environment\n    1. avalanchego: v1.14.1\n    2. subnet-evm: v0.8.0\n    3. Subnet ID: `2gHgAgyDHQv7jzFg6MxU2yyKq5NZBpwFLFeP8xX2E3gyK1SzSQ`\n    4. Blockchain ID: `2PDRxzc6jMbZSTLb3sufkVszgQc2jtDnYZGtDTAAfom1CTwPsE`\n    5. Chain Name: numbersevm\n    6. VM ID: `qeX7kcVMMkVLB9ZJKTpvtSjpLbtYooNEdpFzFShwRTFu76qdx`\n    7. VM Genesis: genesis.json\n    8. Primary P-Chain Address: `P-avax142ue2exu7qxuawxe34ww8t623lv82tu2vt573g`\n\n## Testnet: Snow (雪)\n\nAdd Network to MetaMask, [one-click by Chainlist](https://chainlist.org/chain/10508)\n\n1. Network Name: Numbers Snow\n2. New RPC URL: https://testnetrpc.num.network\n3. Chain ID: 10508\n4. Currency Symbol: NUM\n5. Block Explorer URL: https://testnet.num.network\n6. Websocket RPC URL: wss://testnetrpc.num.network/ws\n7. Environment\n    1. avalanchego: v1.14.1\n    2. subnet-evm: v0.8.0\n    3. Subnet ID: `81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe`\n    4. Blockchain ID: `2oo5UvYgFQikM7KBsMXFQE3RQv3xAFFc8JY2GEBNBF1tp4JaeZ`\n    5. Chain Name: captevm\n    6. VM ID: `kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT`\n    7. VM Genesis: genesis-nativecoin-feemgr-feerecv.json\n    8. Primary P-Chain Address: `P-fuji1lcztar3x7ra0ajen3dtw4mdhk2cyshfhu2hzgk`\n\n# Avalanche Subnets\n\n## Concepts\n\n1. Avalanche's high-level components: `Avalanche -\u003e Subnets -\u003e Chains -\u003e VMs`\n2. Every subnet / chain / vm has a unique ID.\n3. Blackhole: `0x0100000000000000000000000000000000000000`, it is unchangeable.\n\n## Launch Node (avalanchego)\n\nCheck the [official doc](https://docs.avax.network/nodes/build/run-avalanche-node-manually) for launching a node (including AWS/GCP).\n\nYou can set optional custom configs by the `--chain-config-dir` parameter, and the default directory path is `$HOME/.avalanchego/configs/chains/`.\n\nReferences\n1. [Avalanchego Config and Flags](https://docs.avax.network/nodes/maintain/avalanchego-config-flags#--chain-config-dir-string)\n1. [Chain Configs](https://docs.avax.network/nodes/maintain/chain-config-flags)\n1. [Subnet Chain Configs](https://docs.avax.network/subnets/customize-a-subnet#chain-configs)\n\n## Create a Subnet\n\nCreate subnet by `subnet-cli`.\n1. `subnet-cli` uses the key specified in file `$PWD/.subnet-cli.pk` on the P-Chain to pay for the transaction fee.\n1. `subnet-cli` uses Fuji by default. To use mainnet, add `--public-uri https://api.avax.network` ([details](https://docs.avax.network/subnets/subnet-cli#network-selection)).\n1. [Avalanche transaction fee](https://docs.avax.network/quickstart/transaction-fees) lists the subnet action fees.\n\n\u003cdetails\u003e\n\u003csummary\u003eCommand and result\u003c/summary\u003e\n\n```sh\nubuntu@ip-172-31-9-106:~/bafu$ ./wizard.sh                                                                                                         \n2022-07-11T12:29:58.820Z        info    client/client.go:85     fetching X-Chain id             \n2022-07-11T12:29:58.868Z        info    client/client.go:91     fetched X-Chain id      {\"id\": \"2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm\"\n}                                                                                                                                                  \n2022-07-11T12:29:58.868Z        info    client/client.go:100    fetching AVAX asset id  {\"uri\": \"https://api.avax-test.network\"}\n2022-07-11T12:29:58.886Z        info    client/client.go:109    fetched AVAX asset id   {\"id\": \"U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK\"}\n2022-07-11T12:29:58.886Z        info    client/client.go:111    fetching network information\n2022-07-11T12:29:58.905Z        info    client/client.go:120    fetched network information     {\"networkId\": 5, \"networkName\": \"fuji\"}            \n                                                                                                                                                   \n8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF is already a validator on 11111111111111111111111111111111LpoYY                                                  \n                                                                                                                                                   \nReady to run wizard, should we continue?\n*--------------------------*---------------------------------------------------*\n| P-CHAIN ADDRESS          | P-fuji1lcztar3x7ra0ajen3dtw4mdhk2cyshfhu2hzgk     |\n*--------------------------*---------------------------------------------------*\n| P-CHAIN BALANCE          | 0.7980000 $AVAX                                   |\n*--------------------------*---------------------------------------------------*\n| TX FEE                   | 0.201 $AVAX                                       |\n*--------------------------*---------------------------------------------------*\n| REQUIRED BALANCE         | 0.201 $AVAX                                       |\n*--------------------------*---------------------------------------------------*\n| URI                      | https://api.avax-test.network                     |\n*--------------------------*---------------------------------------------------*\n| NETWORK NAME             | fuji                                              |\n*--------------------------*---------------------------------------------------*\n| NEW SUBNET VALIDATORS    | [8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF]               |\n*--------------------------*---------------------------------------------------*\n| SUBNET VALIDATION WEIGHT | 1,000                                             |\n*--------------------------*---------------------------------------------------*\n| CHAIN NAME               | captevm                                           |\n*--------------------------*---------------------------------------------------*\n| VM ID                    | kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT |\n*--------------------------*---------------------------------------------------*\n| VM GENESIS PATH          | genesis.json                                      |\n*--------------------------*---------------------------------------------------*\n✔ Yes, let's create! I agree to pay the fee!\n\n\n2022-07-11T12:30:23.549Z        info    client/p.go:126 creating subnet {\"dryMode\": false, \"assetId\": \"U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk\n3JqnK\", \"createSubnetTxFee\": 100000000}\n2022-07-11T12:30:23.637Z        info    platformvm/checker.go:73        polling subnet  {\"subnetId\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTc\neZcGG\"}\n2022-07-11T12:30:23.638Z        info    platformvm/checker.go:47        polling P-Chain tx      {\"txId\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDr\nGMTceZcGG\", \"expectedStatus\": \"Committed\"}\n2022-07-11T12:30:23.638Z        info    poll/poll.go:42 start polling   {\"internal\": \"1s\"}\n2022-07-11T12:30:25.680Z        info    poll/poll.go:66 poll confirmed  {\"took\": \"2.042000706s\"}\n2022-07-11T12:30:25.680Z        info    platformvm/checker.go:87        finding subnets {\"subnetId\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTc\neZcGG\"}\n2022-07-11T12:30:25.681Z        info    poll/poll.go:42 start polling   {\"internal\": \"1s\"}\n2022-07-11T12:30:25.731Z        info    poll/poll.go:66 poll confirmed  {\"took\": \"50.443532ms\"}\ncreated subnet \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG\" (took 2.092444238s)\n\n\n\nNow, time for some config changes on your node(s).\nSet --whitelisted-subnets=2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG and move the compiled VM kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdD\nYuaT to \u003cbuild-dir\u003e/plugins/kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT.\nWhen you're finished, restart your node.\n✔ Yes, let's continue! I've updated --whitelisted-subnets, built my VM, and restarted my node(s)!\n\n\n2022-07-11T12:31:13.342Z        info    client/p.go:294 adding subnet validator {\"subnetId\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG\", \n\"txFee\": 1000000, \"start\": \"2022-07-11T12:31:43.251Z\", \"end\": \"2022-08-01T11:08:55.000Z\", \"weight\": 1000}\n2022-07-11T12:31:13.486Z        info    platformvm/checker.go:47        polling P-Chain tx      {\"txId\": \"2qdbUCiUtN6MYFyJwq8MW5WDyCjVM9hrneSTbkWAB\nLpTAuUf1e\", \"expectedStatus\": \"Committed\"}\n2022-07-11T12:31:13.486Z        info    poll/poll.go:42 start polling   {\"internal\": \"1s\"}\n2022-07-11T12:31:14.527Z        info    poll/poll.go:66 poll confirmed  {\"took\": \"1.04094826s\"}\nadded 8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF to subnet 2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG validator set (took 1.04094826s)\n\nwaiting for validator 8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF to start validating 2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG...(could take a few \nminutes)\n\n\n2022-07-11T12:34:15.134Z        info    client/p.go:491 creating blockchain     {\"subnetId\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG\", \n\"chainName\": \"captevm\", \"vmId\": \"kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT\", \"createBlockchainTxFee\": 100000000}\ncreated blockchain \"29YUizsFS9pFPvYjsSKB23M2QAooU1yCE2dfSw6pBhpL46SA18\" (took 112.952603ms)\n\n*-------------------*----------------------------------------------------*\n| P-CHAIN ADDRESS   | P-fuji1lcztar3x7ra0ajen3dtw4mdhk2cyshfhu2hzgk      |\n*-------------------*----------------------------------------------------*\n| P-CHAIN BALANCE   | 0.6970000 $AVAX                                    |\n*-------------------*----------------------------------------------------*\n| URI               | https://api.avax-test.network                      |\n*-------------------*----------------------------------------------------*\n| NETWORK NAME      | fuji                                               |\n*-------------------*----------------------------------------------------*\n| SUBNET VALIDATORS | [8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF]                |\n*-------------------*----------------------------------------------------*\n| SUBNET ID         | 2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG |\n*-------------------*----------------------------------------------------*\n| BLOCKCHAIN ID     | 29YUizsFS9pFPvYjsSKB23M2QAooU1yCE2dfSw6pBhpL46SA18 |\n*-------------------*----------------------------------------------------*\n| CHAIN NAME        | captevm                                            |\n*-------------------*----------------------------------------------------*\n| VM ID             | kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT  |\n*-------------------*----------------------------------------------------*\n| VM GENESIS PATH   | genesis.json                                       |\n*-------------------*----------------------------------------------------*\n```\n\u003c/details\u003e\n\nCheck blockchain information by `platform.getBlockchains`:\n\n```\n{\n  \"id\": \"29YUizsFS9pFPvYjsSKB23M2QAooU1yCE2dfSw6pBhpL46SA18\",\n  \"name\": \"captevm\",\n  \"subnetID\": \"2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG\",\n  \"vmID\": \"kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT\"\n}\n```\n\nAdd validator to subnet\n\n\u003cdetails\u003e\n\u003csummary\u003eCommand and result\u003c/summary\u003e\n\n```sh\nubuntu@ip-172-31-9-106:~/bafu$ ./subnet-cli-add-subnet-validator.sh \n2022-07-11T11:14:14.608Z        info    client/client.go:85     fetching X-Chain id\n2022-07-11T11:14:14.843Z        info    client/client.go:91     fetched X-Chain id      {\"id\": \"2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm\"}\n2022-07-11T11:14:14.843Z        info    client/client.go:100    fetching AVAX asset id  {\"uri\": \"https://api.avax-test.network\"}\n2022-07-11T11:14:14.862Z        info    client/client.go:109    fetched AVAX asset id   {\"id\": \"U8iRqJoiJm8xZHAacmvYyZVwqQx6uDNtQeP3CQ6fcgQk3JqnK\"}2022-07-11T11:14:14.862Z        info    client/client.go:111    fetching network information\n2022-07-11T11:14:14.878Z        info    client/client.go:120    fetched network information     {\"networkId\": 5, \"networkName\": \"fuji\"}\n\nReady to add subnet validator, should we continue?\n*------------------*---------------------------------------------------*\n| P-CHAIN ADDRESS  | P-fuji1lcztar3x7ra0ajen3dtw4mdhk2cyshfhu2hzgk     |\n*------------------*---------------------------------------------------*\n| P-CHAIN BALANCE  | 0.7990000 $AVAX                                   |\n*------------------*---------------------------------------------------*\n| TX FEE           | 0.001 $AVAX                                       |\n*------------------*---------------------------------------------------*\n| REQUIRED BALANCE | 0.001 $AVAX                                       |\n*------------------*---------------------------------------------------*\n| URI              | https://api.avax-test.network                     |\n*------------------*---------------------------------------------------*\n| NETWORK NAME     | fuji                                              |\n*------------------*---------------------------------------------------*\n| NODE IDs         | [8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF]               |\n*------------------*---------------------------------------------------*\n| SUBNET ID        | GBEwakER8HzKT7U2mWuVafxTTAMYVQnDXeT92NcCVt4gwfLUL |\n*------------------*---------------------------------------------------*\n| VALIDATE WEIGHT  | 1,000                                             |\n*------------------*---------------------------------------------------*\n✔ Yes, let's create! I agree to pay the fee!\n\n\n\n2022-07-11T11:14:32.624Z        info    client/p.go:294 adding subnet validator {\"subnetId\": \"GBEwakER8HzKT7U2mWuVafxTTAMYVQnDXeT92NcCVt4gwfLUL\", \"txFee\": 1000000, \"start\": \"2022-07-11T11:15:02.564Z\", \"end\": \"2022-08-01T11:08:55.000Z\", \"weight\": 1000}\n2022-07-11T11:14:32.741Z        info    platformvm/checker.go:47        polling P-Chain tx      {\"txId\": \"2Hptsj3d3YxF1riZTG9aFHFrjqNMWfpGmPFyHevSSaUDsob4uy\", \"expectedStatus\": \"Committed\"}\n2022-07-11T11:14:32.742Z        info    poll/poll.go:42 start polling   {\"internal\": \"1s\"}\n2022-07-11T11:14:34.782Z        info    poll/poll.go:66 poll confirmed  {\"took\": \"2.040226592s\"}\nadded 8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF to subnet GBEwakER8HzKT7U2mWuVafxTTAMYVQnDXeT92NcCVt4gwfLUL validator set (took 2.040226592s)\n\nwaiting for validator 8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF to start validating GBEwakER8HzKT7U2mWuVafxTTAMYVQnDXeT92NcCVt4gwfLUL...(could take a few minutes)\n*------------------*---------------------------------------------------*\n| P-CHAIN ADDRESS  | P-fuji1lcztar3x7ra0ajen3dtw4mdhk2cyshfhu2hzgk     |\n*------------------*---------------------------------------------------*\n| P-CHAIN BALANCE  | 0.7980000 $AVAX                                   |\n*------------------*---------------------------------------------------*\n| URI              | https://api.avax-test.network                     |\n*------------------*---------------------------------------------------*\n| NETWORK NAME     | fuji                                              |\n*------------------*---------------------------------------------------*\n| NODE IDs         | [8CGJYaRLChC79CCRnvd7sh5eB9E9L9dVF]               |\n*------------------*---------------------------------------------------*\n| SUBNET ID        | GBEwakER8HzKT7U2mWuVafxTTAMYVQnDXeT92NcCVt4gwfLUL |\n*------------------*---------------------------------------------------*\n| VALIDATE START   | 2022-07-11T11:15:02Z                              |\n*------------------*---------------------------------------------------*\n| VALIDATE END     | 2022-08-01T11:08:55Z                              |\n*------------------*---------------------------------------------------*\n| VALIDATE WEIGHT  | 1,000                                             |\n*------------------*---------------------------------------------------*\n```\n\u003c/details\u003e\n\nLaunch validator. When running `avalanchego`, add\n\n* `-—http-host=0.0.0.0`: Make MetaMask can access the RPC URL\n* `--http-allowed-hosts=\"*\"`: Allow traffic from the RPC node (since v1.10.3)\n\n```sh\n./avalanchego \\\n    --track-subnets=81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe\\\n    --network-id=fuji \\\n    --http-host=0.0.0.0 \\\n    --http-allowed-hosts=\"*\" \\\n    --public-ip=\u003cnode-public-ip\u003e\n```\n\n## Add Validator to Subnet\n\nHigh-level concepts\n\n1. Make a node as validator\n    1. Open Core Browser Extension\n    1. Stake AVAX to make a node a validator\n        1. Go to https://core.app/stake\n        1. Go to Settings -\u003e enable/disable testnet mode\n        1. Go to Validate -\u003e add necessary info\n2. Add the validator to the subnet\n    1. Ues subnet admin to run `subnet-cli`. Find the Subnet admin in the Subnets section below.\n        1. In general, you will run `subnet-cli` on your notebook instead of validator nodes.\n        2. You can use [`avalanchego-api-scripts/subnet-cli/install-subnet-cli-testnet.sh`](https://github.com/numbersprotocol/avalanchego-api-scripts/blob/main/subnet-cli/subnet-cli-add-subnet-validator-testnet.sh) to install.\n    2. Run the command\n\n        ```shell\n        # testnet\n        subnet-cli add subnet-validator \\\n            --node-ids=\"NodeID-7TwAjiRpTbNcqUx6F9EoyXRBLAfeoQXRq\" \\\n            --subnet-id=\"81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe\"\n\n        # mainnet\n        subnet-cli add subnet-validator \\\n            --node-ids=\"NodeID-BXTBUqX8gitUDtVam4fhRWGD1SfeHGoBx\" \\\n            --subnet-id=\"2gHgAgyDHQv7jzFg6MxU2yyKq5NZBpwFLFeP8xX2E3gyK1SzSQ\" \\\n            --public-uri \"https://api.avax.network\"\n        ```\n\n    3. `subnet-cli` will find private key from `$PWD/.subnet-cli.pk` by default.\n    4. The wallet needs to have 0.001 AVAX at least on P-Chain (Fuji).\n\nIf you see `Error: validator not found` when adding a validator to subnet and confirmed that you've re-staked successfully, you can check if the node is running as P-Chain validator by checking the node's explorer page: `https://subnets-test.avax.network/validators/NodeID-\u003cnode-id\u003e`. After re-staking, P-Chain needs minutes to update the validator status.\n\n## Renew Validator\n\nIf the validator's staking duration is expired, the staking amount and rewards will be sent to the staking wallet on P-Chain automatically. You can follow the same steps above to add it as a validator again.\n\nBefore validation staking expires, any wallet can not stake to a validator again. If you try to do so on wallet.avax.network, you will get the error message\n\n\u003e couldn't issue tx: attempted to issue duplicate validation for NodeID-A2Z8m7egVLhKf1Qj14uvXadhExM5zrB7p\n\nValidator version distributions: [mainnet](https://explorer-xp.avax.network/validators), [testnet](https://explorer-xp.avax-test.network/validators)\n\n[Renew Numbers Validators](https://app.asana.com/0/1202305127727547/1202919355642524/f) (internal task)\n\n## Import Existing L1 in Avalanche CLI\n\n```sh\navalanche blockchain import public\n```\n\nProvide the existing L1 information, such as the RPC endpoint, Blockchain ID (not Subnet ID), VM type, and VM version. For example:\n\n```sh\n✔ Fuji Testnet                            # choose network\nWhat is the RPC endpoint?: https://testnetrpc.num.network\nWhat is the Blockchain ID?: 2oo5UvYgFQikM7KBsMXFQE3RQv3xAFFc8JY2GEBNBF1tp4JaeZ\n✔ Subnet-EVM                              # VM type\n✔ v0.7.2                                  # VM version\nSubnet numbers-snow imported successfully\n```\n\nVerify the imported L1 by running the following commands.\n\nConfirm the import is successful:\n\n```sh\navalanche blockchain list\n```\n\nCheck blockchain information summary:\n\n```sh\navalanche blockchain describe captevm\n```\n\n\n\n### BLS Public Key and BLS Signature\n\nIf you're asked to provide BLS Public Key and BLS Signature, you can get them by running the following command on the validator node:\n\n```sh\ncurl -X POST --data '{\n    \"jsonrpc\":\"2.0\",\n    \"id\"     :1,\n    \"method\" :\"info.getNodeID\"\n}' -H 'content-type:application/json;' 127.0.0.1:9650/ext/info\n```\n\nIt should return something like this.\n\n```sh\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"nodeID\": \"NodeID-5mb46qkSBj81k9g9e4VFjGGSbaaSLFRzD\",\n    \"nodePOP\": {\n      \"publicKey\": \"0x8f95423f7142d00a48e1014a3de8d28907d420dc33b3052a6dee03a3f2941a393c2351e354704ca66a3fc29870282e15\",\n      \"proofOfPossession\": \"0x86a3ab4c45cfe31cae34c1d06f212434ac71b1be6cfe046c80c162e057614a94a5bc9f1ded1a7029deb0ba4ca7c9b71411e293438691be79c2dbf19d1ca7c3eadb9c756246fc5de5b7b89511c7d7302ae051d9e03d7991138299b5ed6a570a98\"\n    }\n  },\n  \"id\": 1\n}\n```\n\nThe publicKey is your BLS Public Key, and proofOfPossession is your BLS Signature. Avalanche uses your public key as the signing message ([source 1](https://docs.avax.network/nodes/validate/add-a-validator#validation-period), [source 2](https://docs.avax.network/nodes/maintain/node-backup-and-restore#nodeid)).\n\n## RPC\n\n[MetaMask RPC rule](https://docs.avax.network/subnets/deploy-a-smart-contract-on-your-evm#step-1-setting-up-metamask): `http://NodeIPAddress:9650/ext/bc/BlockchainID/rpc`\n\n### Set RPC\n\nUse Nginx as RPC load balancer.\n\n```sh\n$ vim /etc/nginx/sites-available/default\n```\n\n### Test RPC\n\nTest the RPC connectivity and functionality:\n\n```sh\n$ python3 rpc/rpc_test.py\n```\n\nTesting result:\n\n```sh\nTesting Mainnet RPC\nNode is reachable, HTTP Status Code: 200\nRPC request successful, Response Data: {'jsonrpc': '2.0', 'id': 1, 'result': 'v0.7.0'}\nRPC request successful, Response Data: {'jsonrpc': '2.0', 'id': 10507, 'result': '0x290b'}\nTesting Testnet RPC\nNode is reachable, HTTP Status Code: 200\nRPC request successful, Response Data: {'jsonrpc': '2.0', 'id': 1, 'result': 'v0.6.12'}\nRPC request successful, Response Data: {'jsonrpc': '2.0', 'id': 10508, 'result': '0x290c'}\n```\n\n## Upgrade Node (avalanchego)\n\n[Upgrade Your AvalancheGo Node](https://docs.avax.network/nodes/maintain/upgrade-your-avalanchego-node)\n\n1. Backup node\n\n    ```sh\n    cd\n    cp ~/.avalanchego/staking/staker.crt .\n    cp ~/.avalanchego/staking/staker.key .\n    ```\n\n1. Download pre-build `avalanchego` and `subnet-evm`\n1. Copy `subnet-evm` binary to `avalanchego/plugins/\u003cvmid\u003e`\n1. Stop the running `avalanchego`\n1. Start the new `avalanchego`\n\nNotes\n\n1. When upgrading node, you need to upgrade EVM and plugins as well.\n\n    \u003e [jpop32 — 05/12/2021](https://discord.com/channels/578992315641626624/757576823570825316/841775940706762762)\n    \u003e Plugin is the part of the installation. And it has to be upgraded along with the main executable, yes.\n\nSince `avalanchego v1.9.6`, there are two breaking changes\n\n1. There is no `avalanchego/plugins/evm` (Subnet EVM) because it has been merged into `avalanchego` directly.\n1. The default plugins directory is `~/.avalanchego/plugins/`\n\n```\n$ tree avalanchego-v1.9.6\navalanchego-v1.9.6\n└── avalanchego\n\n$ tree ~/.avalanchego/plugins/\n/home/\u003caccount\u003e/.avalanchego/plugins/\n└── kmYb53NrmqcW7gfV2FGHBHWXNA6YhhWf7R7LoQeGj9mdDYuaT\n```\n\n## Update subnet-evm\n\n1. Download the latest pre-built binary on [subnet-evm GitHub](https://github.com/ava-labs/subnet-evm).\n1. Copy the subnet-evm binary to `~/.avalanchego/plugins/\u003cvmID\u003e`\n1. Restart node (`avalanchego`)\n\n## Updating Utilities\n\nSee `chains/update-validator-{mainnet,testnet}.sh`.\n\n## Network Upgrades: Enable/Disable Precompiles\n\n1. https://docs.avax.network/subnets/customize-a-subnet#network-upgrades-enabledisable-precompiles\n1. https://github.com/ava-labs/subnet-evm/issues/177#issuecomment-1214296935\n\n## Customize Subnet and EVM\n\n\u003e Each blockchain has some genesis state when it’s created.\n\u003e Each Virtual Machine defines the format and semantics of its genesis data.\n\nConfig directory structure\n\n```sh\n$ tree ~/.avalanchego/configs/\n/home/ubuntu/.avalanchego/configs/\n├── chains\n│   └── 29YUizsFS9pFPvYjsSKB23M2QAooU1yCE2dfSw6pBhpL46SA18\n│       ├── config.json\n│       └── upgrade.json\n└── subnets\n    └── 2fQBahhq3F9eip8KobMgjbvBEahW3153kvAy6YPDrGMTceZcGG.json\n```\n\nTips\n1. To update chain config (e.g., `config.json`)\n  1.1. After updating chain config (e.g., `config.json`), `avalanchego` needs to be restarted.\n  1.2. If there is any archive node, you need to update archive node's chain config, too.\n3. If you add fee recipient, the fee recipient will get 100% gas fee.\n\nReferences\n1. https://docs.avax.network/subnets/customize-a-subnet\n2. https://github.com/ava-labs/subnet-evm/tree/master/contract-examples\n\n## Precompile: Minting Native Coins\n\n```\n\u003e contract = await ethers.getContractAt(\"NativeMinterInterface\", \"0x0200000000000000000000000000000000000001\")\n\n\u003e [admin] = await ethers.getSigners()\n\n\u003e await admin.getBalance()\nBigNumber { value: \"99999999999845284000000300\" }\n\n\u003e r = await contract.mintNativeCoin(admin.address, 100)\n\n\u003e await admin.getBalance()\nBigNumber { value: \"99999999999793712000000400\" }\n```\n\nCheck the [official doc](https://docs.avax.network/subnets/customize-a-subnet#minting-native-coins) for the details.\n\n### Check Minting Amount\n\n[Example Tx](https://mainnet.num.network/transaction/0xc20e2e32396b3555140f4cc2dfacf50cc334b6d49ded042c5a137ab31442b317)\n\ndata\n\n```\n0x4f5aaaba0000000000000000000000008cba0477d89394e6d8ad658e11d52113a2da4ab20000000000000000000000000000000000000000001acff4350c4a1576280000\n```\n\ndecode\n\n```\nSignature (Method ID): 0x4f5aaaba\n[0]: 0000000000000000000000008cba0477d89394e6d8ad658e11d52113a2da4ab2\n[1]: 0000000000000000000000000000000000000000001acff4350c4a1576280000\n```\n\n[decode [1]](https://www.binaryhexconverter.com/hex-to-decimal-converter), the result is `32414106000000000000000000` (32,414,106 in Wei).\n\n## Precompile: Configuring dynamic fees\n\n```\n\u003e fm = await ethers.getContractAt(\"IFeeManager\", \"0x0200000000000000000000000000000000000003\")\n\n\u003e await fm.getFeeConfig()\n[\n  BigNumber { value: \"20000000\" },\n  BigNumber { value: \"2\" },\n  BigNumber { value: \"1000000000\" },\n  BigNumber { value: \"100000000\" },\n  BigNumber { value: \"48\" },\n  BigNumber { value: \"0\" },\n  BigNumber { value: \"10000000\" },\n  BigNumber { value: \"500000\" },\n  gasLimit: BigNumber { value: \"20000000\" },\n  targetBlockRate: BigNumber { value: \"2\" },\n  minBaseFee: BigNumber { value: \"1000000000\" },\n  targetGas: BigNumber { value: \"100000000\" },\n  baseFeeChangeDenominator: BigNumber { value: \"48\" },\n  minBlockGasCost: BigNumber { value: \"0\" },\n  maxBlockGasCost: BigNumber { value: \"10000000\" },\n  blockGasCostStep: BigNumber { value: \"500000\" }\n]\n\n\u003e await fm.setFeeConfig(20000000, 2, 1000000000, 100000000, 48, 0, 10000000, 500000)\n\n\u003e await fm.getFeeConfig()\n[\n  BigNumber { value: \"20000000\" },\n  BigNumber { value: \"2\" },\n  BigNumber { value: \"2000000000\" },\n  BigNumber { value: \"100000000\" },\n  BigNumber { value: \"48\" },\n  BigNumber { value: \"0\" },\n  BigNumber { value: \"10000000\" },\n  BigNumber { value: \"500000\" },\n  gasLimit: BigNumber { value: \"20000000\" },\n  targetBlockRate: BigNumber { value: \"2\" },\n  minBaseFee: BigNumber { value: \"2000000000\" },\n  targetGas: BigNumber { value: \"100000000\" },\n  baseFeeChangeDenominator: BigNumber { value: \"48\" },\n  minBlockGasCost: BigNumber { value: \"0\" },\n  maxBlockGasCost: BigNumber { value: \"10000000\" },\n  blockGasCostStep: BigNumber { value: \"500000\" }\n]\n```\n\nCheck the [official doc](https://docs.avax.network/subnets/customize-a-subnet#configuring-dynamic-fees) for the details.\n\n## Precompile: Restricting Smart Contract Deployers\n\n```\n\u003e contract = await ethers.getContractAt(\"IAllowList\", \"0x0200000000000000000000000000000000000000\")\n\n\u003e [admin, test] = await ethers.getSigners()\n\n# 0: None, 1: Enabled, 2: Admin\n\u003e await contract.readAllowList(admin.address)\nBigNumber { value: \"2\" }\n\n\u003e await contract.readAllowList(test.address)\nBigNumber { value: \"0\" }\n\n\u003e await contract.setEnabled(test.address)\n{\n  hash: '0xd117e990e85c2428a620f9bd834b0597db1648f3d2fa5899d929fd1701d46e01',\n  type: 0,\n  accessList: null,\n  blockHash: '0xf6063f0c5e86ab4efaf970e901ca3f5be3335ec61ab8f50fc075a6915f5e19e5',\n  blockNumber: 5,\n  transactionIndex: 0,\n  confirmations: 1,\n  from: '0x8Cba0477d89394E6d8aD658E11d52113A2DA4Ab2',\n  gasPrice: BigNumber { value: \"100000000000\" },\n  gasLimit: BigNumber { value: \"41432\" },\n  to: '0x0200000000000000000000000000000000000000',\n  value: BigNumber { value: \"0\" },\n  nonce: 2,\n  data: '0x0aaf704300000000000000000000000063b7076fc0a914af543c2e5c201df6c29fcc18c5',\n  r: '0x01e0c663a55757e12237f001811cab7a610c3ebfeba99ac9f0e29cbe4f4bd5ed',\n  s: '0x38b126e31bb8ee608e45554956c9a6eefb091961755283f9dff69964c2512f41',\n  v: 21049,\n  creates: null,\n  chainId: 10507,\n  wait: [Function (anonymous)]\n}\n\n\u003e await contract.readAllowList(test.address)\nBigNumber { value: \"1\" }\n```\n\nCheck the [official doc](https://docs.avax.network/subnets/customize-a-subnet#restricting-smart-contract-deployers) for the details.\n\n## Interoperability\n\n* [Overview](https://ava-labs-preview-4bd33b78-6a2a-400d-a6ba-4df588ac1831.docs.buildwithfern.com/portal/interoperability/overview)\n* [CCTP](https://developers.circle.com/cctp/cctp-supported-blockchains)\n\n## Admin\n\n[avalanchego-api-scripts](https://github.com/numbersprotocol/avalanchego-api-scripts) is the admin toolkit.\n\n### Confirm Updated Node Is Working\n\nNode will show \"consensus starting\" for both C-Chain and P-Chain:\n\n```\n[10-02|06:32:32.114] INFO \u003cC Chain\u003e snowman/transitive.go:401 consensus starting {\"lastAcceptedBlock\": \"2L56FDEYAemMKTJ2uD1MnGpC1pC2WBgeNtwyjh6AhgTffvCWR2\"}\n[10-02|06:32:32.117] INFO \u003cP Chain\u003e snowman/transitive.go:401 consensus starting {\"lastAcceptedBlock\": \"22egidV1exdWT8ckaAf8dv9YiWAs2ESmY2NmtJUwNqBGCyNef2\"}\n[10-02|06:32:41.919] INFO \u003cX Chain\u003e avalanche/transitive.go:346 consensus starting {\"lenFrontier\": 1}\n```\n\nNow, you can check if the Node is running normally.\n\n### Confirm Node Is Working\n\n```\n$ cd ~/avalanchego-api-scripts/api\n$ watch -n 5 ./info.isBootstrapped.sh X\n$ watch -n 5 ./info.isBootstrapped.sh 2oo5UvYgFQikM7KBsMXFQE3RQv3xAFFc8JY2GEBNBF1tp4JaeZ\n$ watch -n 5 ./health.health.sh\n\n# Show validators by giving the Subnet ID\n$ ./platform.getCurrentValidators.sh 81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe | jq .\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  1318  100  1139  100   179  21189   3330 --:--:-- --:--:-- --:--:-- 24867\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"validators\": [\n      {\n        \"txID\": \"QWwjVDJTX2pSYxi5oNk51VeZaZPip9jZnSVhLqipgKMRJDxFP\",\n        \"startTime\": \"1662288001\",\n        \"endTime\": \"1677599993\",\n        \"stakeAmount\": \"1000\",\n        \"nodeID\": \"NodeID-7TwAjiRpTbNcqUx6F9EoyXRBLAfeoQXRq\",\n        \"connected\": true,\n        \"uptime\": \"1.0000\"\n      },\n      {\n        \"txID\": \"2cfHmfw29UBCjMDTRb9RwistPFekmHzEdfpNci1TLLeoMdtckZ\",\n        \"startTime\": \"1662363248\",\n        \"endTime\": \"1680278397\",\n        \"stakeAmount\": \"1000\",\n        \"nodeID\": \"NodeID-JbeonHKqomERomXgCiXr9oC9vfynkBupj\",\n        \"connected\": true,\n        \"uptime\": \"1.0000\"\n      },\n      {\n        \"txID\": \"2PqA6BE5wiA5iE9yZeMsfaSag4pT5U1uxMMGyia1HCF6SEUNRe\",\n        \"startTime\": \"1662364392\",\n        \"endTime\": \"1682870344\",\n        \"stakeAmount\": \"1000\",\n        \"nodeID\": \"NodeID-BffXkmzM8EwrBZgpqFp9pwgE9DbDgYKG2\",\n        \"connected\": true,\n        \"uptime\": \"1.0000\"\n      },\n      {\n        \"txID\": \"26mBFfgiFTz3eFo1QAmvMiBpfTtmgMvzPJ2eB5V6WjK2CkTcuJ\",\n        \"startTime\": \"1667294891\",\n        \"endTime\": \"1685548750\",\n        \"stakeAmount\": \"1000\",\n        \"nodeID\": \"NodeID-24WK7qiKXAumya1kKEktwj2ubBbRyq5UW\",\n        \"connected\": true,\n        \"uptime\": \"1.0000\"\n      },\n      {\n        \"txID\": \"kApLebvYz54fRratWmWqEttbNktbCDQMK93mDmr1rm9w64gDU\",\n        \"startTime\": \"1669827497\",\n        \"endTime\": \"1688140751\",\n        \"stakeAmount\": \"1000\",\n        \"nodeID\": \"NodeID-A2Z8m7egVLhKf1Qj14uvXadhExM5zrB7p\",\n        \"connected\": true,\n        \"uptime\": \"1.0000\"\n      }\n    ]\n  },\n  \"id\": 1\n}\n```\n\nUsing `info.peers` to check all the nodes and versions in a subnet. The nodes might not be validators. The node running the command will not be listed in the result. Remember to add `--public-ip=\u003cpublic-ip\u003e` when running `avalanchego`. Check public IPs are correct and uptimes are \u003e 98.\n\n```\n$ ./info.peers.sh  | jq .\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100  2027  100  1661  100   366   435k  98255 --:--:-- --:--:-- --:--:--  659k\n{\n  \"jsonrpc\": \"2.0\",\n  \"result\": {\n    \"numPeers\": \"4\",\n    \"peers\": [\n      ...\n      {\n        \"ip\": \"\u003cprivate-or-public-ip-and-port\u003e\",\n        \"publicIP\": \"private-ip-and-port\",\n        \"nodeID\": \"NodeID-A2Z8m7egVLhKf1Qj14uvXadhExM5zrB7p\",\n        \"version\": \"avalanche/1.9.4\",\n        \"lastSent\": \"2023-01-27T17:03:56Z\",\n        \"lastReceived\": \"2023-01-27T17:03:52Z\",\n        \"observedUptime\": \"99\",\n        \"observedSubnetUptimes\": {\n          \"81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe\": \"99\"\n        },\n        \"trackedSubnets\": [\n          \"81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe\"\n        ],\n        \"benched\": []\n      }\n    ]\n  },\n  \"id\": 1\n}\n```\n\n# HTTPS RPC Provider\n\nConcept: Nginx with Certbot as reverse proxy redirects RPC requests to the validators.\n\n# Websocket RPC Provider\n\nConcept: Nginx with Certbot as reverse proxy redirects RPC requests to the websocket endpoint of validators.\n\nWebsocket log subscription example using Python:\n\n```sh\npip3 install websockets\n```\n\n```python\nimport asyncio\nimport json\n\nfrom websockets import connect\n\n\nasync def get_event():\n    async with connect('wss://testnetrpc.num.network/ws') as ws:\n        await ws.send('{\"jsonrpc\":\"2.0\", \"id\": 1, \"method\": \"eth_subscribe\", \"params\": [\"logs\", {\"topics\": []}]}')\n        subscription_response = await ws.recv()\n        print(subscription_response)\n        while True:\n            try:\n                message = await asyncio.wait_for(ws.recv(), timeout=60)\n                print(json.loads(message))\n            except asyncio.TimeoutError:\n                pass\n            except Exception as e:\n                print(f'Error: {e}')\n                break\n\n\nif __name__ == '__main__':\n    asyncio.run(get_event())\n\n```\n\n# Self-Hosted Faucet\n\nhttps://faucet.num.network\n\n1. Create product build.\n    1. Copy `.env` to `build/` where product server.ts is there.\n2. Copy `build/client/*` to `/var/www/html/faucet/`.\n3. Update Nginx config.\n\n    ```\n    +upstream faucet {\n    +        server localhost:8000\n    +}\n    ...\n    -        root /var/www/html;\n    +        root /var/www/html/faucet;\n    ...\n    +        location /api/ {\n    +                proxy_pass http://faucet\n    +        }\n    ```\n\n4. Run product server: `npm start`\n5. Utility commands\n\n    ```\n    $ sudo service nginx configtest\n    $ sudo service nginx reload\n    ```\n# Wrapped NUM\n\nWe completed a technical survey and verified some concepts on the testnet.\n\nIf you are interested in wrapped ERC20 token, refer to [canonical-wnum](https://github.com/numbersprotocol/canonical-wnum/).\n\n# Bridge\n\nTo bridge native NUM to ERC20/BEP20 NUM, you can use [XY Finance](https://app.xy.finance/) ([audit report](https://docs.xy.finance/getting-started/security)).\n\n\u003cimg src=\"https://user-images.githubusercontent.com/292790/208720428-ab794a2a-ab4d-406e-a51c-63e6ef01a5d4.png\" width=\"50%\"\u003e\n\nTo know more about NUM token, you can visit the [NUM token website](https://num.numbersprotocol.io/).\n\n# Archieve Node\n\nArchive Node provides full history of the blockchain and does not need to be a validator.\n\n[Running an Archival Node](https://docs.avax.network/dapps/launch-your-ethereum-dapp#running-an-archival-node)\n* [state sync bootstrapping has to be off](https://docs.avax.network/nodes/build/set-up-node-with-installer#running-the-script).\n* [~2TB storage size for archive node](https://support.avax.network/en/articles/6158842-nodes-faq)\n\nMake a Full Node instance to be an Archive Node instance:\n1. Create an instance from full node image\n1. Increase disk space to 2TB\n1. Delete `~/.avalanchego/staking/*`\n1. Update network config\n    * mainnet: `~/.avalanchego/configs/chains/2PDRxzc6jMbZSTLb3sufkVszgQc2jtDnYZGtDTAAfom1CTwPsE/config.json`\n    * testnet: `~/.avalanchego/configs/chains/2oo5UvYgFQikM7KBsMXFQE3RQv3xAFFc8JY2GEBNBF1tp4JaeZ/config.json`\n\n    ```sh\n    {\n        \"pruning-enabled\": false,\n        # newly added content\n        \"eth-apis\": [\n            \"eth\",\n            \"eth-filter\",\n            \"net\",\n            \"web3\",\n            \"internal-eth\",\n            \"internal-blockchain\",\n            \"internal-transaction\",\n            \"debug-tracer\"\n        ]\n    }\n    ```\n\n1. Run an Archive Node by `avalanchego`\n\n    Run an archive node for mainnet\n\n    ```sh\n    #!/bin/sh\n\n    # Subnet IDs\n    SUBNET_MAINNET=\"2gHgAgyDHQv7jzFg6MxU2yyKq5NZBpwFLFeP8xX2E3gyK1SzSQ\"\n\n    ./avalanchego \\\n        --track-subnets=${SUBNET_MAINNET} \\\n        --http-host=0.0.0.0 \\\n        --public-ip=\u003cnode-public-ip\u003e \\\n        --http-allowed-hosts=\"*\"\n    ```\n\n    Run an archive node for testnet\n\n    ```sh\n    #!/bin/sh\n\n    # Subnet IDs\n    SUBNET_MAINNET=\"81vK49Udih5qmEzU7opx3Zg9AnB33F2oqUTQKuaoWgCvFUWQe\"\n\n    ./avalanchego \\\n        --track-subnets=${SUBNET_MAINNET} \\\n        --http-host=0.0.0.0 \\\n        --public-ip=\u003cnode-public-ip\u003e \\\n        --http-allowed-hosts=\"*\"\n    ```\n\n1. (optional) Test an Archive Node\n\n    Run the commands on the Archive Node's instances for testing it's working as Archive Node.\n\n    For mainnet\n\n    ```sh\n    $ curl http://localhost:9650/ext/bc/2PDRxzc6jMbZSTLb3sufkVszgQc2jtDnYZGtDTAAfom1CTwPsE/rpc \\\n         -X POST \\\n         -H \"Content-Type: application/json\" \\\n        --data '{\"method\":\"debug_traceTransaction\",\"params\":[\"0x9a241e580d29d90d890316559d055c0df5cc7203be43b166d63c51de2218efc8\"],\"id\":1,\"jsonrpc\":\"2.0\"}'\n    ```\n\n    For testnet\n\n    ```sh\n    $ curl http://localhost:9650/ext/bc/2oo5UvYgFQikM7KBsMXFQE3RQv3xAFFc8JY2GEBNBF1tp4JaeZ/rpc \\\n         -X POST \\\n         -H \"Content-Type: application/json\" \\\n        --data '{\"method\":\"debug_traceTransaction\",\"params\":[\"0x7d2dec6c3e7ce2a387d988a0603ce7de6d487d6aeaf6b58eabdb123161cee0a2\"],\"id\":1,\"jsonrpc\":\"2.0\"}'\n    ```\n\n    [Discord discussion](https://discord.com/channels/578992315641626624/905684871731634196/1026850988042244247)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumbersprotocol%2Fnumbers-network","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnumbersprotocol%2Fnumbers-network","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnumbersprotocol%2Fnumbers-network/lists"}