├── token-app └── .gitattributes ├── airdrop ├── prod │ ├── linux │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── bairdrop │ ├── mac │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── bairdrop │ └── windows │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── bairdrop.exe ├── testnet │ ├── linux │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── tbairdrop │ ├── mac │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── tbairdrop │ └── windows │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── tbairdrop.exe └── guides │ ├── assets │ ├── result_shot.png │ ├── transfer_save.png │ └── transfer_example.png │ ├── 使用指南.md │ └── Guides.md ├── balance-dumper ├── prod │ ├── linux │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── bdumper │ └── mac │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── bdumper ├── testnet │ ├── linux │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── tbdumper │ └── mac │ │ ├── .gitattributes │ │ ├── sha256checksum │ │ └── tbdumper └── guides │ ├── assets │ └── result_shot.png │ ├── 使用指南.md │ └── Guides.md ├── extension └── install.md ├── .gitignore ├── README.md └── install.sh /token-app/.gitattributes: -------------------------------------------------------------------------------- 1 | *.zip filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/prod/linux/.gitattributes: -------------------------------------------------------------------------------- 1 | bairdrop filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/prod/mac/.gitattributes: -------------------------------------------------------------------------------- 1 | bairdrop filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/prod/windows/.gitattributes: -------------------------------------------------------------------------------- 1 | bairdrop.exe filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/testnet/linux/.gitattributes: -------------------------------------------------------------------------------- 1 | tbairdrop filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/testnet/mac/.gitattributes: -------------------------------------------------------------------------------- 1 | tbairdrop filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /balance-dumper/prod/linux/.gitattributes: -------------------------------------------------------------------------------- 1 | bdumper filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /balance-dumper/prod/mac/.gitattributes: -------------------------------------------------------------------------------- 1 | bdumper filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /airdrop/testnet/windows/.gitattributes: -------------------------------------------------------------------------------- 1 | tbairdrop.exe filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /balance-dumper/testnet/linux/.gitattributes: -------------------------------------------------------------------------------- 1 | tbdumper filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /balance-dumper/testnet/mac/.gitattributes: -------------------------------------------------------------------------------- 1 | tbdumper filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /extension/install.md: -------------------------------------------------------------------------------- 1 | # How to manually install the Binance Chain Extension Wallet 2 | 3 | -------------------------------------------------------------------------------- /airdrop/prod/linux/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 9ed3a461fee770f116886496af42aa66934f91210eb2a67e855e5fbb79be4ce5 ./bairdrop 3 | 4 | -------------------------------------------------------------------------------- /airdrop/prod/mac/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 9719268c6df4ccd0e85509372f84b0e23cca3f58ab1d39f9a6b14d7c3abd189b ./bairdrop 3 | 4 | -------------------------------------------------------------------------------- /airdrop/prod/windows/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | b59629171d3ef2097ec91fc0382b0a0d20fd89d96b551e58408ecd6afd37cc06 bairdrop.exe 3 | 4 | -------------------------------------------------------------------------------- /airdrop/testnet/linux/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 6db9d2792c65703cb089c3a3045e34e6fe6bcd88fd4f32a440bf0761edba4b7f ./tbairdrop 3 | 4 | -------------------------------------------------------------------------------- /airdrop/testnet/windows/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 5f9d3ac1b5f00bf672194dd7f267828874c248d849f2703f5cf97a13d383fddb tbairdrop.exe 3 | -------------------------------------------------------------------------------- /balance-dumper/prod/mac/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | b46d0dfcbdcbf1af3515fb0b9423c59f3781953e504162a0be36efb66faa16ac ./bdumper 3 | 4 | -------------------------------------------------------------------------------- /airdrop/guides/assets/result_shot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bnb-chain/chain-tooling/HEAD/airdrop/guides/assets/result_shot.png -------------------------------------------------------------------------------- /balance-dumper/prod/linux/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | b21f366367a6b80b1422ecaca0748fcd299d7c5a5e7cee176e2800578659a554 ./bdumper 3 | 4 | -------------------------------------------------------------------------------- /balance-dumper/testnet/linux/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 3ffdd78243c34a701b8c6fbfd43c88bae8324bad082d61331cd747d5e84e0fdf ./tbdumper 3 | 4 | -------------------------------------------------------------------------------- /balance-dumper/testnet/mac/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | 8ffec00c02304dc5a199afa09bc73b7dfd42ff5f1c7e2eeb9e437c4a26ef5c29 ./tbdumper 3 | 4 | -------------------------------------------------------------------------------- /airdrop/guides/assets/transfer_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bnb-chain/chain-tooling/HEAD/airdrop/guides/assets/transfer_save.png -------------------------------------------------------------------------------- /airdrop/testnet/mac/sha256checksum: -------------------------------------------------------------------------------- 1 | 2 | d1ebbe29f0a02483a3395c0203d516eb5e572fe2b657d5c5d66a73aac2830865 tbairdrop ./tbdumper 3 | 4 | -------------------------------------------------------------------------------- /airdrop/guides/assets/transfer_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bnb-chain/chain-tooling/HEAD/airdrop/guides/assets/transfer_example.png -------------------------------------------------------------------------------- /balance-dumper/guides/assets/result_shot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bnb-chain/chain-tooling/HEAD/balance-dumper/guides/assets/result_shot.png -------------------------------------------------------------------------------- /airdrop/prod/linux/bairdrop: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9ed3a461fee770f116886496af42aa66934f91210eb2a67e855e5fbb79be4ce5 3 | size 39473712 4 | -------------------------------------------------------------------------------- /airdrop/prod/mac/bairdrop: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9719268c6df4ccd0e85509372f84b0e23cca3f58ab1d39f9a6b14d7c3abd189b 3 | size 38017800 4 | -------------------------------------------------------------------------------- /airdrop/prod/windows/bairdrop.exe: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b59629171d3ef2097ec91fc0382b0a0d20fd89d96b551e58408ecd6afd37cc06 3 | size 38313472 4 | -------------------------------------------------------------------------------- /airdrop/testnet/linux/tbairdrop: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:6db9d2792c65703cb089c3a3045e34e6fe6bcd88fd4f32a440bf0761edba4b7f 3 | size 39473512 4 | -------------------------------------------------------------------------------- /airdrop/testnet/mac/tbairdrop: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d1ebbe29f0a02483a3395c0203d516eb5e572fe2b657d5c5d66a73aac2830865 3 | size 38017752 4 | -------------------------------------------------------------------------------- /balance-dumper/prod/linux/bdumper: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b21f366367a6b80b1422ecaca0748fcd299d7c5a5e7cee176e2800578659a554 3 | size 47630552 4 | -------------------------------------------------------------------------------- /balance-dumper/prod/mac/bdumper: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b46d0dfcbdcbf1af3515fb0b9423c59f3781953e504162a0be36efb66faa16ac 3 | size 54463252 4 | -------------------------------------------------------------------------------- /airdrop/testnet/windows/tbairdrop.exe: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:5f9d3ac1b5f00bf672194dd7f267828874c248d849f2703f5cf97a13d383fddb 3 | size 38312960 4 | -------------------------------------------------------------------------------- /balance-dumper/testnet/linux/tbdumper: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:3ffdd78243c34a701b8c6fbfd43c88bae8324bad082d61331cd747d5e84e0fdf 3 | size 47675432 4 | -------------------------------------------------------------------------------- /balance-dumper/testnet/mac/tbdumper: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:8ffec00c02304dc5a199afa09bc73b7dfd42ff5f1c7e2eeb9e437c4a26ef5c29 3 | size 54527036 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | *.iml 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | .sts4-cache 12 | 13 | ### IntelliJ IDEA ### 14 | .idea 15 | *.iws 16 | *.iml 17 | *.ipr 18 | 19 | ### NetBeans ### 20 | /nbproject/private/ 21 | /build/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ 26 | 27 | **/target/** 28 | .mvn/** 29 | out/** 30 | 31 | ### Avro ### 32 | dex-service/src/main/java/org/binance/dex/model/avro/ 33 | 34 | tmp/* 35 | *.tmp 36 | *.exe 37 | *.exe~ 38 | 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **This repo is out of maintenance and decommissioned.** 2 | # BNB Beacon Chain Tool Box 3 | 4 | # Airdrop 5 | __Disclaimer: Airdrop is very error prone and can cause big financial loss. Please do test it on testnet and use it carefully.__ 6 | 7 | ## Installation 8 | We have a installer script (install.sh) that takes care of chain directory setup. This uses the following defaults: 9 | 10 | * Home folder in ~/.bairdrop 11 | * Client executables stored in /usr/local/bin (i.e. bairdrop or tbairdrop) 12 | 13 | ``` 14 | # One-line install 15 | sh <(wget -qO- https://raw.githubusercontent.com/bnb-chain/chain-tooling/airdrop/install.sh) 16 | ``` 17 | 18 | Note that we have two different binaries: `bairdrop` is used for mainnet and `tbairdrop` for testnet. 19 | 20 | ## How to Use 21 | 22 | * [English Version](https://github.com/bnb-chain/chain-tooling/blob/airdrop/airdrop/guides/Guides.md) 23 | * [使用手册](https://github.com/bnb-chain/chain-tooling/blob/airdrop/airdrop/guides/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.md) 24 | 25 | # Token APP 26 | __Disclaimer: When you try to issue asset on BNB Beacon Chain, you should be extra careful with your command. It is recommended to use a hardware wallet to sign your transactions. Please do test it on testnet and use it carefully.__ 27 | 28 | > :no_entry: [DEPRECATED] Active at https://github.com/bnb-chain/chain-tooling/token-app 29 | 30 | :point_right:Please follow the latest guideline on how to manage your BEP2 tokens and submit listing proposals: 31 | 32 | 33 | # Balance Dumper 34 | 35 | 36 | ## Installation 37 | We have a installer script (install.sh) that takes care of chain directory setup. This uses the following defaults: 38 | 39 | * Home folder in ~/.bdumper 40 | * Client executables stored in /usr/local/bin (i.e. bdumper or tbdumper) 41 | 42 | ``` 43 | # One-line install 44 | sh <(wget -qO- https://raw.githubusercontent.com/bnb-chain/chain-tooling/airdrop/install.sh) 45 | ``` 46 | 47 | Note that we have two different binaries: `bdumper` is used for mainnet and `tbdumper` for testnet. 48 | 49 | ## How to Use 50 | 51 | * [English Version](https://github.com/bnb-chain/chain-tooling/blob/airdrop/balance-dumper/guides/Guides.md) 52 | * [使用手册](https://github.com/bnb-chain/chain-tooling/blob/airdrop/balance-dumper/guides/%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97.md) 53 | 54 | -------------------------------------------------------------------------------- /balance-dumper/guides/使用指南.md: -------------------------------------------------------------------------------- 1 | # 账户余额导出工具 2 | 3 | ## 介绍 4 | 5 | **Balance Dumper**是用于导出在某一高度某个资产余额快照的工具。它需要在本地运行一个全节点。同步至指定高度后,分析数据库来得到用户资产详情。以上数据会被导出至一个CSV文件。 6 | 7 | ## 安装 8 | 9 | 你可以使用以下安装脚本install.sh完成安装。安装细节:: 10 | 11 | * Home目录在 ~/.bdumper 12 | * 可执行文件安装位置为 /usr/local/bin (i.e. bairdrop or tbairdrop) 13 | 14 | ``` 15 | # One-line install 16 | sh <(wget -qO- https://raw.githubusercontent.com/binance-chain/chain-tooling/airdrop/install.sh) 17 | ``` 18 | 19 | 请注意需要在主网和测试网使用不同的可执行文件:`bairdrop` 用于主网,`tbairdrop` 用于测试网 20 | 21 | 确认下载安装成功: 22 | ``` 23 | $ bdumper --help 24 | Balance Dumper 25 | 26 | Usage: 27 | bdumper [flags] 28 | 29 | Flags: 30 | --asset string query asset 31 | --height int query height 32 | -h, --help help for bdumper 33 | --home string directory for config and data (default "${HOME}/.bdumper") 34 | -o, --output string directory for storing the csv file of balance result (default "${HOME}/.bdumper") 35 | ``` 36 | 37 | ## 使用方法 38 | 39 | **参数** 40 | * height: 导出高度 41 | * asset:指定资产 42 | * home: 全节点主目录, 默认 `${HOME}/.bdumper` 43 | * Output: 导出结果目录, 默认 `${HOME}/.bdumper` 44 | 45 | 例如,你需要得到56503900高度时BNB的分布快照,可以执行以下命令: 46 | ``` 47 | $ bdumper --height 56503900 --asset BNB --home ~/myhome -o ~/myoutput & 48 | ``` 49 | 建议以后台形式运行此程序。 50 | 51 | ## 日志 52 | 53 | 导出日志将被保存在主目录下的 `dumper.log` 。例如: 54 | 55 | ``` 56 | $ bdumper --height 56503900 --asset BNB --home ~/myhome -o ~/myoutput & 57 | ===>got the block height at 00:00 UTC of the day, 56503807 58 | ===>start node,home = /Users/fletcher/.bdumper, stopAt = 56503900, StateSyncHeight = 56503807 59 | ===>node started from height = 0 60 | ===>syncing...... 61 | ``` 62 | 63 | 全节点同步期间将显示: *`'syncing......'`* 。你可以通过 `curl localhost:27147/stauts `检查同步情况 64 | 65 | ``` 66 | $ curl localhost:27147/status 67 | { 68 | "jsonrpc": "2.0", 69 | "id": "", 70 | "result": { 71 | ...... 72 | "sync_info": { 73 | ...... 74 | "latest_block_height": "56503807", // the latest block height downloaded from peers 75 | "latest_block_time": "2019-12-22T00:00:00.414320569Z", 76 | "catching_up": true, 77 | "index_height": "0" 78 | }, 79 | ...... 80 | } 81 | } 82 | ``` 83 | 对于测试网, 84 | ``` 85 | $ curl localhost:26657/status 86 | { 87 | "jsonrpc": "2.0", 88 | "id": "", 89 | "result": { 90 | ...... 91 | "sync_info": { 92 | ...... 93 | "latest_block_height": "56503807", // the latest block height downloaded from peers 94 | "latest_block_time": "2019-12-22T00:00:00.414320569Z", 95 | "catching_up": true, 96 | "index_height": "0" 97 | }, 98 | ...... 99 | } 100 | } 101 | ``` 102 | 103 | `latest_block_height` 为当前同步高度。 104 | 105 | 由于使用`state sync`, `latest_block_height`将从0很快增长为 0:00 UTC时的高度。当 `state sync`结束后,全节点将切换为`fast sync`模式。显示出以下信息表示同步完成。 106 | ``` 107 | ===>node catches up the target height 56503900, terminal the node 108 | ``` 109 | 110 | 同步结束后将开始导出快照。 111 | ``` 112 | ===>start to fetch at height = 56503900 113 | ===>finish fetching,got 107677 matched account 114 | ``` 115 | 116 | 最终保存的文件为“资产名称+高度.csv”,例如 *BNB_56503900.csv* 资产显示为总资产和其他类型:available,freeze和in-order 117 | 118 | ![BNB_56503900.csv](./assets/result_shot.png "BNB_56503900.csv") 119 | 120 | >**注意资产金额需要扩大额e^8来表示小数。*bnb1ultyhpw2p2ktvr68swz56570lgj2rdsadq3ym2* 的余额为*48461323.79051191BNB*.** 121 | 122 | ## 注意事项 123 | 124 | - 主目录中的数据会根据每次导出高度不同而有所删减 125 | - 如果你有一个本地运行的全节点,可以备份BNCHOME主目录用作导出快照 126 | - 节点同步时间随着高度增加而增加 127 | -------------------------------------------------------------------------------- /airdrop/guides/使用指南.md: -------------------------------------------------------------------------------- 1 | # 使用指南 2 | 3 | **声明:空投功能请谨慎操作。建议现在测试网熟悉相关操作** 4 | 5 | Binance Chain空投工具通过 [Multi-send交易](https://docs.binance.org/transfer.html#multi-send)交易实现了在同时向多个账户转账的功能。`Multi-send`的手续费有20%的优惠,每个地址每笔转账只需要 0.0003 BNB。例如,你使用multi-send同时向三个地址转账1BNB 6 | 7 | ``` 8 | [ 9 | { 10 | "to":"bnb1g5p04snezgpky203fq6da9qyjsy2k9kzr5yuhl", 11 | "amount":"100000000:BNB" 12 | }, 13 | { 14 | "to":"bnb1l86xty0m55ryct9pnypz6chvtsmpyewmhrqwxw", 15 | "amount":"100000000:BNB" 16 | }, 17 | { 18 | "to":"bnb1l86xty0maxdgst9pnypz6chvtsmpydkjflfioe", 19 | "amount":"100000000:BNB" 20 | } 21 | ] 22 | ``` 23 | 24 | 无论在主网还是在测试网,你只需支付0.0003 BNB * 3 = 0.0009 BNB, 而不是0.000375BNB*3 25 | 26 | ## 安装 27 | 28 | 你可以使用以下安装脚本install.sh完成安装。安装细节: 29 | 30 | * Home目录在 ~/.bairdrop 31 | * 可执行文件安装位置为 /usr/local/bin (i.e. bairdrop or tbairdrop) 32 | 33 | ``` 34 | # One-line install 35 | sh <(wget -qO- https://raw.githubusercontent.com/binance-chain/chain-tooling/airdrop/install.sh) 36 | ``` 37 | 38 | 请注意需要在主网和测试网使用不同的可执行文件:`bairdrop` 用于主网,`tbairdrop` 用于测试网 39 | 40 | 确认下载安装成功: 41 | ``` 42 | $ bairdrop 43 | BlockChain Airdrop 44 | 45 | Usage: 46 | bairdrop [command] 47 | 48 | Available Commands: 49 | keys Add or view local private keys 50 | run Run airdrop 51 | help Help about any command 52 | 53 | Flags: 54 | -h, --help help for bairdrop 55 | --home string directory for config and data (default "/Users/fletcher/.tbairdrop") 56 | -o, --output string Output format (text|json) (default "text") 57 | 58 | Use "tbairdrop [command] --help" for more information about a command. 59 | ``` 60 | 61 | ### 准备空投详情文件 62 | 63 | 首先,你需要准备一个CSV文件用来存储空投接收方的地址和金额。 64 | 65 | ![transfer_details.csv](./assets/transfer_example.png?raw=true "example") 66 | 67 | 68 | >**注意CSV文件不能保留表格头。从左到右依次填写:`接收地址`,`金额`,`代币`. `金额`需要扩大额e^8来表示小数。例如,图中第一行表示向tbnb1rtzy6szuyzcj4amfn6uarvne8a5epxrdc28nhr 空投0.1BNB.** 69 | 70 | 存储为CSV格式 71 | 72 | ![save](./assets/transfer_save.png?raw=true "save") 73 | 74 | 若接受地址数大于300,将按照每300个一批的方式执行。每批间间隔2秒。 75 | 76 | ### 使用详情 77 | 78 | 空投工具有两个子命令: 79 | 80 | * keys:管理空投使用的账户 81 | * run: 执行空投 82 | 83 | #### Keys 84 | 85 | 空投前,你需要配置对应的地址。功能可以参考`bnbcli`文档: [keys](https://docs.binance.org/keys.html) 你可以生成新的地址,或者通过助记词导入仪有账户。请注意默认的主目录是`~/.bairdrop` 86 | 87 | #### Run 88 | 89 | 通过 `run`子命令开始空投 90 | 91 | **参数** 92 | 93 | * file: 空投详情文件位置 94 | * from: 空投发送方的地址名称,可以通过 `bairdrop keys list`查询 95 | * chain-id: 区块链的ID 96 | * memo: 交易注释 97 | * node: 全节点host:port, 默认为"tcp://localhost:26657" 98 | * home: 主目录,默认为"/Users/fletcher/.tbairdrop" 99 | 100 | 101 | ### 用例 102 | 103 | 以`tbairdrop`为例,首先你需要配置好源账户。在以下例子中, 使用账户`fromAcc`. 104 | 105 | ``` 106 | $ tbairdrop keys list 107 | NAME: TYPE: ADDRESS: PUBKEY: 108 | fromAcc local tbnb1m38ds8d69kwd8a4uaz5fm3hmvh94wk5gfeszxn bnbp1addwnpepqdqlls9gxnqujgkdpty6nluxtc6cuurqe7fhe8jmp87exwzq7s5vkfxcvxk 109 | ``` 110 | 111 | 接着需要准备好空投详情文件: `transfer_details.csv` 112 | 113 | 最后执行`airdrop`命令 114 | 115 | ``` 116 | $ tbairdrop run --file transfer_details.csv --chain-id Binance-Chain-Nile --node data-seed-pre-0-s1.binance.org:80 --from fromAcc 117 | ``` 118 | 119 | 执行结果会打印在屏幕上,你可以获得交易的`txhash` 120 | 121 | ``` 122 | 1. ==>Start to run with file: transfer_details.csv 123 | 2. ==>Start batch 1(from tbnb1rtzy6szuyzcj4amfn6uarvne8a5epxrdc28nhr to tbnb1tyrc4usqp52ne60y2qnta4jk997e79tzcmvlcm) 124 | 3. Password to sign with 'fromAcc': 125 | 4. ==>Transaction hash: BDB452AE09AB9961FD77109DB6DB36559C64415D37F7CEDEF7027FEC43D1130B, sending... 126 | 5. ==>Sending completed, committed at block 69726953 (tx hash: BDB452AE09AB9961FD77109DB6DB36559C64415D37F7CEDEF7027FEC43D1130B) 127 | 128 | 6. ==>Start batch 2(from tbnb1vze2xyajsl3dpumkewuz0jdschstnyr6wtyctz to tbnb15xemc2fk9cvxewa87d0js3ypq7aawrku24l7px) 129 | 7. ==>Transaction hash: C66DFFCF6DE1146468CE0947AB5E554E7FF1C87942969F20167692228F8B37A1, sending... 130 | 8. ==>Sending completed, committed at block 69726961 (tx hash: C66DFFCF6DE1146468CE0947AB5E554E7FF1C87942969F20167692228F8B37A1) 131 | 132 | 9. ==>Start batch 3(from tbnb17jql0796cjuxzxwmjfdm779gd2306lpexemx27 to tbnb1qgtdt7y062mk66vgu37e0lgamngwgj5asce74f) 133 | 10. ==>Transaction hash: F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725, sending... 134 | 11. ==>Sending completed, committed at block 69726969 (tx hash: F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725) 135 | 136 | 12. ==>Start batch 4(from tbnb1zgczyzlxyk34rwqdzrpxez35k52qy7uyl7lp8q to tbnb1zgczyzlxyk34rwqdzrpxez35k52qy7uyl7lp8q) 137 | 13. ==>Transaction hash: DD1C8F9B6A7C0F526CFA41A6D221D28AC26DD196D5AC109B7F72655B0E726E63, sending... 138 | 14. ==>Sending completed, committed at block 69726979 (tx hash: DD1C8F9B6A7C0F526CFA41A6D221D28AC26DD196D5AC109B7F72655B0E726E63)` 139 | ``` 140 | 141 | ### 验证交易 142 | 143 | 为了确认交易执行结果,你可以通过[主网浏览器](https://explorer.binance.org/) 或 [测试网浏览器](https://testnet-explorer.binance.org/) 查询`txhash` 来验证。 144 | 145 | ## 常见错误 146 | 147 | 一旦出现了执行错误,需要仔细核对CSV文件以防止重复发放。 148 | 例如,错误日志如下: 149 | 150 | + 日志终止在第8行,或第9行,说明batch1和batch2执行完全,但是Batch3还未开始执行。你可以将CSV中的前两部分删掉再重新执行。 151 | + 日志终止在第10行,说明batch1和batch2执行完全,但是不确定Batch3执行结果: 你可以通过`txhash`:F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725* offline在浏览器上查询执行结果: `https://testnet-explorer.binance.org/tx/F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725`. 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /balance-dumper/guides/Guides.md: -------------------------------------------------------------------------------- 1 | # User manual of Balance Dumper 2 | 3 | ## Introduce 4 | 5 | **Balance Dumper** is a CLI designed to dump a snapshot of balance on a particular token at certain height by starting a `fullnode` on client side. It stops the `fullnode` at the given height, and analyzes the database to find all the accounts of the specified token, exports them to a CSV file in your specified directory. 6 | 7 | ## Installation 8 | 9 | We have a installer script (install.sh) that takes care of chain directory setup. This uses the following defaults: 10 | 11 | * Home folder in ~/.bdumper 12 | * Client executables stored in /usr/local/bin (i.e. bdumper or tbdumper) 13 | 14 | ``` 15 | # One-line install 16 | sh <(wget -qO- https://raw.githubusercontent.com/binance-chain/chain-tooling/airdrop/install.sh) 17 | ``` 18 | 19 | Note that we have two different binaries: `bairdrop` is used for mainnet and `tbairdrop` for testnet. 20 | 21 | To confirm the installament is successful: 22 | 23 | ``` 24 | $ bdumper --help 25 | Balance Dumper 26 | 27 | Usage: 28 | bdumper [flags] 29 | 30 | Flags: 31 | --asset string query asset 32 | --height int query height 33 | -h, --help help for bdumper 34 | --home string directory for config and data (default "${HOME}/.bdumper") 35 | -o, --output string directory for storing the csv file of balance result (default "${HOME}/.bdumper") 36 | ``` 37 | 38 | ## Usage 39 | 40 | **Parameters** 41 | 42 | * Height: pecify the height of the snapshot to dump 43 | * Asset: specify the asset for the account balance to list 44 | * home: where to host full node, default `${HOME}/.bdumper` 45 | * Output: where to save results, default `${HOME}/.bdumper` 46 | 47 | Assuming that we want to list the account balance of *`BNB`* at the height of *`56503900`*, simply enter the following command 48 | 49 | ``` 50 | $ bdumper --height 56503900 --asset BNB --home ~/myhome -o ~/myoutput & 51 | ``` 52 | 53 | We recommend that it run as a daemon, as it takes time in most cases. 54 | 55 | ## Log 56 | 57 | When the user executes the command, the process log is printed on the console, and output to a log file named `dumper.log` under the `HOME` folder. The log shows like the following 58 | 59 | ``` 60 | $ bdumper --height 56503900 --asset BNB --home ~/myhome -o ~/myoutput & 61 | ===>got the block height at 00:00 UTC of the day, 56503807 62 | ===>start node,home = /Users/fletcher/.bdumper, stopAt = 56503900, StateSyncHeight = 56503807 63 | ===>node started from height = 0 64 | ===>syncing...... 65 | ``` 66 | 67 | Notice that the log may stop at *`'syncing......'`* for a long time, because it would take long time to download the block data from other peers. You can `curl` localhost:27147/stauts to check if the process is running. 68 | 69 | ``` 70 | $ curl localhost:27147/status 71 | { 72 | "jsonrpc": "2.0", 73 | "id": "", 74 | "result": { 75 | ...... 76 | "sync_info": { 77 | ...... 78 | "latest_block_height": "56503807", // the latest block height downloaded from peers 79 | "latest_block_time": "2019-12-22T00:00:00.414320569Z", 80 | "catching_up": true, 81 | "index_height": "0" 82 | }, 83 | ...... 84 | } 85 | } 86 | ``` 87 | 88 | For testnet, 89 | ``` 90 | $ curl localhost:26657/status 91 | { 92 | "jsonrpc": "2.0", 93 | "id": "", 94 | "result": { 95 | ...... 96 | "sync_info": { 97 | ...... 98 | "latest_block_height": "41977", // the latest block height downloaded from peers 99 | "latest_block_time": "2019-12-22T00:00:00.414320569Z", 100 | "catching_up": true, 101 | "index_height": "0" 102 | }, 103 | ...... 104 | } 105 | } 106 | ``` 107 | 108 | If the data similar to the above of `json` format is returned, it indicates that the process is still running well. The value of `latest_block_height` represents the latest block height you've downloaded from other peers. 109 | 110 | At first, the value of `latest_block_height` is 0. And then it turns to the height of the block created at 0:00 UTC of the day. It is likely that this value remains at that height for some time which depends on your network speed, meaning that the process is synchronizing the data in *`state sync`* mode. Then this value increases, which means it has switched to fast sync mode. After it finishes synchronizing, the log shows like the below 111 | 112 | ``` 113 | ===>node catches up the target height 56503900, terminal the node 114 | ``` 115 | 116 | It stops the synchronization, and starts to fetch accounts at this height. 117 | 118 | ``` 119 | ===>start to fetch at height = 56503900 120 | ===>finish fetching,got 107677 matched account 121 | ``` 122 | 123 | Finally, those account balances will be ouput to a CSV file, named by asset and height, as *BNB_56503900.csv*. You can see the total balance, which equals sume of `available`, `freeze` and `in-order` . The following is the example of a result file 124 | 125 | ![BNB_56503900.csv](./assets/result_shot.png "BNB_56503900.csv") 126 | 127 | >**Note that for the balance, we take the last 8 digits as the decimal place, meaning the total balance of *bnb1ultyhpw2p2ktvr68swz56570lgj2rdsadq3ym2* in the above example is actually *48461323.79051191BNB*.** 128 | 129 | ## Notice 130 | 131 | - If a folder serves as a *home* of a fullnode that you started ever, then you should be careful to use it as your home directory for this executive tool, since the historic block data could be removed by this tool. 132 | - If you has launched a fullnode that is keeping synced with the Block Chain. You can do a quick search by using the BNCHOME as the home dir of this tool.The premise is to stop the whole node for a moment. 133 | - Once it starts, it will take a long time to download data from other peers. For current experience, it will take minutes or even hours to sync. The longer this height is from 00:00UTC, the longer it takes. 134 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Install script for Binance Chain Tools 3 | # - bairdrop 4 | # - bdumper 5 | 6 | # Note: this is based on current structure of `node-binary` repo, which is not optimal 7 | # - The installer script is a hack to simplify the installation process 8 | # - Our binaries should eventually be refactor into a `apt` or `npm` repo, which features upgradability 9 | # - We should not rely on folders for addressing (instead use git branches for versions) 10 | 11 | # Detect operating system 12 | # Future Improvement: Refactor into helper function 13 | if [[ "$OSTYPE" == "linux-gnu" ]]; then 14 | DETECTED_OS="linux" 15 | elif [[ "$OSTYPE" == "darwin"* ]]; then 16 | DETECTED_OS="mac" 17 | elif [[ "$OSTYPE" == "cygwin" ]]; then 18 | DETECTED_OS="linux" 19 | elif [[ "$OSTYPE" == "msys" ]]; then 20 | DETECTED_OS="windows" 21 | elif [[ "$OSTYPE" == "win32" ]]; then 22 | DETECTED_OS="windows" # TODO(Dan): can you run shell on windows? 23 | elif [[ "$OSTYPE" == "freebsd"* ]]; then 24 | DETECTED_OS="linux" 25 | else 26 | FULLNODE_echo "Error: unable to detect operating system. Please install manually by referring to $DOCS_WEB_LINK" 27 | LIGHTNODE_DOCS_WEB_LINK="" 28 | exit 1 29 | fi 30 | 31 | # Check for existence of wget 32 | if [ ! -x /usr/bin/wget ]; then 33 | # some extra check if wget is not installed at the usual place 34 | command -v wget >/dev/null 2>&1 || { 35 | echo >&2 "Error: you need to have wget installed and in your path. Use brew (mac) or apt (unix) to install wget" 36 | exit 1 37 | } 38 | fi 39 | 40 | echo "@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@" 41 | echo "@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@" 42 | echo "@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@" 43 | echo "@@@@@@@@@@@@@ @@@@@@@@@@@@@" 44 | echo "@@@@@@@@@@@ @@@@@@@@@@@" 45 | echo "@@@@@@@@@ @@@ @@@@@@@@@" 46 | echo "@@@@@@@@ @@@@@@@ @@@@@@@@" 47 | echo "@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@" 48 | echo "@@@ @@@@@@@@@@@@ @@@@@@@@@@@@ @@@" 49 | echo "@ @@@@@@@@ @@@@@@@@ @" 50 | echo "@ @@@@@@@@ @@@@@@@@ @" 51 | echo "@@@ @@@@@@@@@@@@ @@@@@@@@@@@@ @@@" 52 | echo "@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@" 53 | echo "@@@@@@@@ @@@@@@@ @@@@@@@@" 54 | echo "@@@@@@@@@ @@@ @@@@@@@@@" 55 | echo "@@@@@@@@@@@ @@@@@@@@@@@" 56 | echo "@@@@@@@@@@@@@ @@@@@@@@@@@@@" 57 | echo "@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@" 58 | echo "@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@" 59 | echo "" 60 | 61 | echo "========== Binance Chain Node Installation ==========" 62 | echo "Installer Version: 0.1.beta" 63 | echo "Detected OS: $DETECTED_OS" 64 | echo "=====================================================" 65 | 66 | # Install location 67 | USR_LOCAL_BIN="/usr/local/bin" 68 | # Note: /usr/local/bin choice from https://unix.stackexchange.com/questions/259231/difference-between-usr-bin-and-usr-local-bin 69 | # Future improvement: needs uninstall script (brew uninstall) that removes executable from bin 70 | 71 | # Choose airdrop Directory 72 | read -e -p "Choose home directory for airdrop [default: ~/.bairdrop]:" AIRDROP_DIR 73 | AIRDROP_DIR=${AIRDROP_DIR:-"$HOME/.bairdrop"} 74 | 75 | # Choose dumper directory 76 | read -e -p "Choose home directory for balance dumper [default: ~/.bdumper]:" DUMPER_DIR 77 | DUMPER_DIR=${DUMPER_DIR:-"$HOME/.bdumper"} 78 | 79 | # Detect previous installation and create .bairdrop folder, 80 | echo "... creating $AIRDROP_DIR" 81 | if [ -d "$AIRDROP_DIR" ]; then 82 | echo "... Error: Binance Chain Airdrop has already been installed" 83 | echo "... Error: Please remove contents of ${AIRDROP_DIR} before reinstalling." 84 | exit 1 85 | else 86 | mkdir -p $AIRDROP_DIR 87 | fi 88 | 89 | if [ -f "$USR_LOCAL_BIN/bairdrop" ]; then 90 | echo "... Error: Binance Chain Mainnet Airdrop has already been installed" 91 | echo "... Error: Please remove bairdrop from /usr/local/bin before reinstalling." 92 | exit 1 93 | fi 94 | if [ -f "$USR_LOCAL_BIN/tbairdrop" ]; then 95 | echo "... Error: Binance Chain Testnet Airdrop has already been installed" 96 | echo "... Error: Please remove tbairdropfrom /usr/local/bin before reinstalling." 97 | exit 1 98 | fi 99 | if [ -f "$USR_LOCAL_BIN/bdumper" ]; then 100 | echo "... Error: Binance Chain Mainnet Balance Dumper has already been installed" 101 | echo "... Error: Please remove bdumper from /usr/local/bin before reinstalling." 102 | exit 1 103 | fi 104 | if [ -f "$USR_LOCAL_BIN/tbdumper" ]; then 105 | echo "... Error: Binance Chain Testnet Balance Dumper has already been installed" 106 | echo "... Error: Please remove tbdumper from /usr/local/bin before reinstalling." 107 | exit 1 108 | fi 109 | 110 | # File Download URLs 111 | GH_REPO_URL="https://github.com/binance-chain/chain-tooling/raw/airdrop" 112 | 113 | # Download both Testnet and Mainnet Airdrop 114 | for NETWORK in "prod" "testnet"; do 115 | if [ "$NETWORK" = "prod" ]; then 116 | FILENAME="bairdrop" 117 | else 118 | FILENAME="tbairdrop" 119 | fi 120 | AD_VERSION_PATH="airdrop/$NETWORK/$DETECTED_OS/$FILENAME" 121 | AD_BINARY_URL="$GH_REPO_URL/$AD_VERSION_PATH" 122 | cd $USR_LOCAL_BIN 123 | echo "... Downloading $FILENAME executable:" $AD_BINARY_URL 124 | wget -q --show-progress "$AD_BINARY_URL" 125 | chmod 755 "./$FILENAME" 126 | done 127 | 128 | # Download both Testnet and Mainnet Dumper 129 | for NETWORK in "prod" "testnet"; do 130 | if [ "$NETWORK" = "prod" ]; then 131 | FILENAME="bdumper" 132 | else 133 | FILENAME="tbdumper" 134 | fi 135 | BD_VERSION_PATH="balance-dumper/$NETWORK/$DETECTED_OS/$FILENAME" 136 | BD_BINARY_URL="$GH_REPO_URL/$BD_VERSION_PATH" 137 | cd $USR_LOCAL_BIN 138 | echo "... Downloading $FILENAME executable:" $BD_BINARY_URL 139 | wget -q --show-progress "$BD_BINARY_URL" 140 | chmod 755 "./$FILENAME" 141 | done 142 | 143 | # Add installed version of Binance Chain to path 144 | echo "... Installation successful!" 145 | echo "... \`bairdrop\`, \`tbairdrop\`, \`bdumper\`, \`tbdumper\` added to $USR_LOCAL_BIN" -------------------------------------------------------------------------------- /airdrop/guides/Guides.md: -------------------------------------------------------------------------------- 1 | # Guides 2 | 3 | **Disclaimer: Airdrop is very error prone and can cause big financial loss. Please do test it on testnet and use it carefully.** 4 | 5 | Binance Chain airdrop tool helps you send tokens to multiple addresses with the help of [Multi-send transaction](https://docs.binance.org/transfer.html#multi-send). The benefit of doing so is that you can get a 20% discount of transfer fees. The total transaction fee is 0.0003 BNB per token per address. For example, if you send 3 BNB to 3 different addresses. 6 | 7 | ``` 8 | [ 9 | { 10 | "to":"bnb1g5p04snezgpky203fq6da9qyjsy2k9kzr5yuhl", 11 | "amount":"100000000:BNB" 12 | }, 13 | { 14 | "to":"bnb1l86xty0m55ryct9pnypz6chvtsmpyewmhrqwxw", 15 | "amount":"100000000:BNB" 16 | }, 17 | { 18 | "to":"bnb1l86xty0maxdgst9pnypz6chvtsmpydkjflfioe", 19 | "amount":"100000000:BNB" 20 | } 21 | ] 22 | ``` 23 | 24 | You will pay on mainnet/testnet `0.0003 BNB * 3 = 0.0009 BNB`, rather than 0.000375BNB*3 25 | 26 | ## Install 27 | 28 | We have a installer script (install.sh) that takes care of chain directory setup. This uses the following defaults: 29 | 30 | * Home folder in ~/.bairdrop 31 | * Client executables stored in /usr/local/bin (i.e. bairdrop or tbairdrop) 32 | ``` 33 | # One-line install 34 | sh <(wget -qO- https://raw.githubusercontent.com/binance-chain/chain-tooling/airdrop/install.sh) 35 | ``` 36 | Note that we have two different binaries: `bairdrop` is used for mainnet and `tbairdrop` for testnet. 37 | 38 | To confirm the installament is successful: 39 | ``` 40 | $ bairdrop 41 | BlockChain Airdrop 42 | 43 | Usage: 44 | bairdrop [command] 45 | 46 | Available Commands: 47 | keys Add or view local private keys 48 | run Run airdrop 49 | help Help about any command 50 | 51 | Flags: 52 | -h, --help help for bairdrop 53 | --home string directory for config and data (default "/Users/fletcher/.tbairdrop") 54 | -o, --output string Output format (text|json) (default "text") 55 | 56 | Use "tbairdrop [command] --help" for more information about a command. 57 | ``` 58 | 59 | ### Prepare Distribution File 60 | First of all, we need to prepare the CSV file of transfer details, including target accounts and the amount for the individual. It has its specific format which looks like the below: 61 | 62 | ![transfer_details.csv](./assets/transfer_example.png?raw=true "example") 63 | 64 | >**Note that there is no Header in this CSV. From left to right are `target address`,`amount`,`asset`. For `amount`, the amout needs to be boosted by 1e8 for decimal part. For instance,1st row means transfer tbnb1rtzy6szuyzcj4amfn6uarvne8a5epxrdc28nhr 0.1BNB.** 65 | 66 | Save it as CSV format 67 | 68 | ![save](./assets/transfer_save.png?raw=true "save") 69 | 70 | The airdrop tool processes the transfer in batches if the number of reeceiver accounts exceeds 300. It creates every 300 rows as a batch, with an interval of 2s between each batch. 71 | 72 | ### Usage 73 | There are two subcommands: 74 | * keys: for manage accounts as source of airdrop 75 | * run: execute airdrop transactions 76 | 77 | #### Keys 78 | Before distributing, you have to configure the source account for this distribution . This subcommand works the sam as [keys](https://docs.binance.org/keys.html) subcommand of `bnbcli`. You can add a new key or import a key from seed phrase. Please note that the default home folder is `~/.bairdrop` 79 | 80 | #### Run 81 | Then we can start distributing with subcommand `run`. 82 | 83 | **Parameters** 84 | * file: File of airdrop details 85 | * from: Name or address of private key with which to sign multi-send transaction. You can see the names with `bairdrop keys list` 86 | * chain-id: Chain ID of blockchain 87 | * memo: Memo to send along with transaction 88 | * node: fullnode host:port, default "tcp://localhost:26657" 89 | * home: directory for config and data (default "/Users/fletcher/.tbairdrop") 90 | 91 | 92 | ### Example 93 | 94 | Now, let us do a demo with `tbairdrop`. First of all, make sure the you have the right account locally. In this example, we use the account with name of `fromAcc`. 95 | 96 | ``` 97 | $ tbairdrop keys list 98 | NAME: TYPE: ADDRESS: PUBKEY: 99 | fromAcc local tbnb1m38ds8d69kwd8a4uaz5fm3hmvh94wk5gfeszxn bnbp1addwnpepqdqlls9gxnqujgkdpty6nluxtc6cuurqe7fhe8jmp87exwzq7s5vkfxcvxk 100 | ``` 101 | Secondly, you need to prepare a CSV file, eg . `transfer_details.csv` 102 | 103 | At last, you can execute the `airdrop` with the transfer file specified. 104 | ``` 105 | $ tbairdrop run --file transfer_details.csv --chain-id Binance-Chain-Nile --node data-seed-pre-0-s1.binance.org:80 --from fromAcc 106 | ``` 107 | 108 | Following is the log of this execution, you can get `txhash`of this airdrop transaction. 109 | 110 | ``` 111 | 1. ==>Start to run with file: transfer_details.csv 112 | 2. ==>Start batch 1(from tbnb1rtzy6szuyzcj4amfn6uarvne8a5epxrdc28nhr to tbnb1tyrc4usqp52ne60y2qnta4jk997e79tzcmvlcm) 113 | 3. Password to sign with 'fromAcc': 114 | 4. ==>Transaction hash: BDB452AE09AB9961FD77109DB6DB36559C64415D37F7CEDEF7027FEC43D1130B, sending... 115 | 5. ==>Sending completed, committed at block 69726953 (tx hash: BDB452AE09AB9961FD77109DB6DB36559C64415D37F7CEDEF7027FEC43D1130B) 116 | 117 | 6. ==>Start batch 2(from tbnb1vze2xyajsl3dpumkewuz0jdschstnyr6wtyctz to tbnb15xemc2fk9cvxewa87d0js3ypq7aawrku24l7px) 118 | 7. ==>Transaction hash: C66DFFCF6DE1146468CE0947AB5E554E7FF1C87942969F20167692228F8B37A1, sending... 119 | 8. ==>Sending completed, committed at block 69726961 (tx hash: C66DFFCF6DE1146468CE0947AB5E554E7FF1C87942969F20167692228F8B37A1) 120 | 121 | 9. ==>Start batch 3(from tbnb17jql0796cjuxzxwmjfdm779gd2306lpexemx27 to tbnb1qgtdt7y062mk66vgu37e0lgamngwgj5asce74f) 122 | 10. ==>Transaction hash: F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725, sending... 123 | 11. ==>Sending completed, committed at block 69726969 (tx hash: F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725) 124 | 125 | 12. ==>Start batch 4(from tbnb1zgczyzlxyk34rwqdzrpxez35k52qy7uyl7lp8q to tbnb1zgczyzlxyk34rwqdzrpxez35k52qy7uyl7lp8q) 126 | 13. ==>Transaction hash: DD1C8F9B6A7C0F526CFA41A6D221D28AC26DD196D5AC109B7F72655B0E726E63, sending... 127 | 14. ==>Sending completed, committed at block 69726979 (tx hash: DD1C8F9B6A7C0F526CFA41A6D221D28AC26DD196D5AC109B7F72655B0E726E63)` 128 | ``` 129 | ## Verify Transfer Transaction 130 | 131 | To confirm that your transaction went through, you can use [mainet explorer](https://explorer.binance.org/) or [testnet explorer](https://testnet-explorer.binance.org/) for searching airdrop transacions by `txhash` to verify the airdrop result. 132 | 133 | ### Errors 134 | It is worth noting that if for any reason it fails during a batch execution, you need to double confirm that whether this transfer is on chain based on tx hash the console prints. And you should remove the records of the successful transfer from the CSV to prevent repeated transfer, and execute it again. 135 | 136 | In the previous example, 137 | + if it crashes after the console prints line: 8 or 9, it means batch1 and batch2 are transferred successfully and batch3 is not executed yet. We should remove the related rows from the CSV, and re-run this file with the command. 138 | + if it crashes after the console prints line 10, it means batch1 and batch2 are transferred successfully. But it is not sure if batch3 is successfully executed, we should take a look with the transaction hash *F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725* offline. For instance, you can check it on the explorer `https://testnet-explorer.binance.org/tx/F474F3ABF5E770EE1291821C07234236403028767BD912011F5CAB42228D8725`. 139 | 140 | --------------------------------------------------------------------------------