Previous Version
Before HF24, Hive property names were the same as those from Steem, and the library that I used was this one: @droida/3-blockchains-1-program.
After that, symbols and property names changed, and some API calls were not working using the same require
instruction. So I had to adapt my scripts.
Because I wanted to make the minimal amount of change in my existing scripts, I use newhive as argument for operations not working with the Steem library, eg transfer. Here is my library for working with the 3 blockchains.
chainlib.js
var currentChainName="steem";
const chain=require("steem");
const hive=require("@hiveio/hive-js");
module.exports = {
/**
* @argument {String} name the blockchain name (newhive for transfer and claim rewards)
*/
getChain: function(name) {
if (name && name!=currentChainName) {
currentChainName=name;
if (name=='steem') {
chain.api.setOptions({ url: 'https://api.steemit.com' });
chain.config.set('address_prefix','STM');
chain.config.set('chain_id','0000000000000000000000000000000000000000000000000000000000000000');
chain.config.set('alternative_api_endpoints', ['https://api.steemit.com', 'https://api.steemit.com']);
return chain;
} else if (name=='hive') {
chain.api.setOptions({ url: 'https://api.hive.blog' });
chain.config.set('address_prefix','STM');
chain.config.set('chain_id','beeab0de00000000000000000000000000000000000000000000000000000000');
chain.config.set('alternative_api_endpoints', ['https://api.openhive.network', 'https://rpc.esteem.app']);
chain.config.set('rebranded_api', true);
//chain.broadcast.updateOperations() // not needed anymore
return chain;
} else if (name=='newhive') {
hive.api.setOptions({ url: 'https://api.hive.blog' });
hive.config.set('address_prefix','STM');
hive.config.set('chain_id','beeab0de00000000000000000000000000000000000000000000000000000000');
hive.config.set('alternative_api_endpoints', ['https://api.openhive.network', 'https://rpc.esteem.app']);
hive.config.set('rebranded_api', true);
return hive;
} else if (name=='blurt') {
chain.api.setOptions({ url: 'https://rpc.blurt.world', useAppbaseApi: true });
chain.config.set('address_prefix','BLT');
chain.config.set('chain_id','cd8d90f29ae273abec3eaa7731e25934c63eb654d55080caff2ebb7f5df6381f');
chain.config.set('alternative_api_endpoints', ['https://blurtd.privex.io', 'https://api.blurt.blog']);
return chain;
}
}
return chain;
},
getChainName: function() {
if (currentChainName=="newhive") {
return "hive";
}
return currentChainName;
},
getSymbol: function() {
switch (currentChainName) {
case 'steem':
return "STEEM";
case 'hive':
case 'newhive':
return "HIVE";
case 'blurt':
return "BLURT";
}
},
getStableSymbol: function() {
switch (currentChainName) {
case 'steem':
return "SBD";
case 'hive':
case 'newhive':
return "HBD";
}
},
getPowerSymbol: function() {
switch (currentChainName) {
case 'steem':
return "SP";
case 'hive':
case 'newhive':
return "HP";
case 'blurt':
return "BP";
}
},
getPrefix: function() {
return module.exports.getChainName()+"_";
},
getStablePrefix: function() {
var stableSymbol=module.exports.getStableSymbol();
if (stableSymbol) {
return stableSymbol.toLowerCase()+"_";
}
}
};
Example
The blockchain name is passed as a command line argument.
#!/usr/bin/node
const chainlib=require("./chainlib.js");
const chain=chainlib.getChain(process.argv[2]);
chain.api.getDynamicGlobalProperties(function(err, result) {
console.log(err, result);
});
Quicktrades
I published this small library mainly because @quicktrades now uses it for trading in Hive and Steem internal markets. The release will be out in the coming days.