├── .gitignore ├── README.md ├── claimer.js ├── config.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json 3 | .vscode -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EOS claimer 2 | 3 | Node script for EOS BP to claim their rewards automatically. 4 | 5 | change your owner info in config.json. -------------------------------------------------------------------------------- /claimer.js: -------------------------------------------------------------------------------- 1 | const Eos = require('eosjs'); 2 | const config = require('./config.json'); 3 | const httpEndPoint = config.httpEndPoint; 4 | const chainId = config.chainId; 5 | const wif = config.wif; 6 | const producerName = config.producerName; 7 | const permission = config.permission; 8 | 9 | var eos = Eos({ 10 | httpEndpoint: httpEndPoint, chainId: chainId, 11 | keyProvider: wif 12 | }); 13 | 14 | 15 | cacheRewards(); 16 | //try every 10 min 17 | setInterval(cacheRewards, 10 * 60 * 1000 + 5000); 18 | ////////////////////////// 19 | function cacheRewards() { 20 | Promise.all([getGlobal(), getProducer(producerName)]).then(([global, producer]) => { 21 | let bpay = (global.perblock_bucket * producer.unpaid_blocks) / global.total_unpaid_blocks / 10000; 22 | let vpay = (global.pervote_bucket * producer.total_votes) / (1 * global.total_producer_vote_weight) / 10000; 23 | if (vpay < 100) { 24 | vpay = 0; 25 | } 26 | let next_claim_time = 1 * producer.last_claim_time / 1000 + 24 * 60 * 60 * 1000; 27 | if (next_claim_time > Date.now()) { 28 | return 0; 29 | } 30 | return bpay + vpay; 31 | }, errs => { 32 | console.error(errs); 33 | //retry 34 | cacheRewards(); 35 | }).then(rewards => { 36 | console.log("current rewards:", rewards); 37 | if (rewards > 0) { 38 | eos.transaction({ 39 | // ...headers, 40 | actions: [ 41 | { 42 | account: 'eosio', 43 | name: 'claimrewards', 44 | authorization: [{ 45 | actor: producerName, 46 | permission: permission 47 | }], 48 | data: { 49 | owner: producerName 50 | } 51 | } 52 | ] 53 | }).then(res => { 54 | console.log(res); 55 | }, err => { 56 | console.error(err); 57 | //retry 58 | cacheRewards(); 59 | }); 60 | } 61 | }); 62 | } 63 | 64 | function getGlobal() { 65 | return new Promise((resolve, reject) => { 66 | eos.getTableRows({ 67 | "scope": "eosio", 68 | "code": "eosio", 69 | "table": "global", 70 | "json": true 71 | }).then(res => { 72 | resolve(res.rows[0]); 73 | }, err => { 74 | console.error(err); 75 | reject(err); 76 | }); 77 | }); 78 | } 79 | 80 | function getProducer(name) { 81 | return new Promise((resolve, reject) => { 82 | eos.getTableRows({ 83 | "scope": "eosio", 84 | "code": "eosio", 85 | "table": "producers", 86 | "lower_bound": name, 87 | "limit": 1, 88 | "json": true 89 | }).then(res => { 90 | if (!res.rows[0] || name != res.rows[0].owner) { 91 | reject("producer not exist!"); 92 | } 93 | resolve(res.rows[0]); 94 | }, err => { 95 | console.error(err); 96 | reject(err); 97 | }); 98 | }); 99 | } 100 | 101 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "httpEndPoint": "https://api.eoseco.com", 3 | "chainId": "aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906", 4 | "wif": "", 5 | "producerName": "eosecoeoseco", 6 | "permission": "claimer" 7 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eos-claimer", 3 | "version": "1.0.0", 4 | "description": "auto script for bp to claim rewards", 5 | "main": "claimer.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Joshua Qiu", 10 | "license": "ISC", 11 | "dependencies": { 12 | "eosjs": "^16.0.0" 13 | } 14 | } 15 | --------------------------------------------------------------------------------