Created
November 22, 2019 06:21
-
-
Save denniswon/cfb2b70204e57ecd191e3c6036aa111f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// import or require Harmony class | |
const { Harmony } = require('@harmony-js/core'); | |
// import or require settings | |
const { ChainID, ChainType } = require('@harmony-js/utils'); | |
const URL_TESTNET = `https://api.s0.b.hmny.io`; | |
const URL_MAINNET = `https://api.s0.t.hmny.io`; | |
// 1. initialize the Harmony instance | |
const harmony = new Harmony( | |
// rpc url | |
URL_MAINNET, | |
{ | |
// chainType set to Harmony | |
chainType: ChainType.Harmony, | |
// chainType set to HmyLocal | |
chainId: ChainID.HmyMainnet, | |
}, | |
); | |
// 2. get wallet ready | |
// one12e6w28cphg504nhltjrndt7gz2mmxlpnkqau8s | |
const phrase = 'resemble rent deposit unique garment ripple burst negative else decorate menu theme'; | |
// one1a2rhuaqjcvfu69met9sque2l3w5v9z6qcdcz65 | |
// surge welcome lion goose gate consider taste injury health march debris kick | |
// add privateKey to wallet | |
const sender = harmony.wallet.addByMnemonic(phrase); | |
// 3. get sharding info | |
async function setSharding() { | |
// Harmony is a sharded blockchain, each endpoint have sharding structure, | |
// However sharding structure is different between mainnet, testnet and local testnet | |
// We need to get sharding info before doing cross-shard transaction | |
const res = await harmony.blockchain.getShardingStructure(); | |
harmony.shardingStructures(res.result); | |
} | |
// 4. get transaction payload ready | |
async function transfer(receiver) { | |
// run set sharding first, if you want to make a cross-shard transaction | |
await setSharding(); | |
//1e18 | |
const txn = harmony.transactions.newTx({ | |
// token send to | |
to: receiver, | |
// amount to send | |
value: '10000000000000000000', // 10 ONE | |
// gas limit, you can use string | |
gasLimit: '210000', | |
// send token from shardID | |
shardID: 0, | |
// send token to toShardID | |
toShardID: 1, | |
// gas Price, you can use Unit class, and use Gwei, then remember to use toWei(), which will be transformed to BN | |
gasPrice: new harmony.utils.Unit('100').asGwei().toWei(), | |
}); | |
// sign the transaction use wallet; | |
// This will happen at the chrome extension. | |
const signedTxn = await harmony.wallet.signTransaction(txn); | |
// Now you can use `Transaction.observed()` to listen events | |
// Frontend received back the signedTxn and do the followings to Send transaction. | |
signedTxn | |
.observed() | |
.on('transactionHash', (txnHash) => { | |
console.log(''); | |
console.log('--- hash ---'); | |
console.log(''); | |
console.log(txnHash); | |
console.log(''); | |
}) | |
.on('receipt', (receipt) => { | |
console.log(''); | |
console.log('--- receipt ---'); | |
console.log(''); | |
console.log(receipt); | |
console.log(''); | |
}) | |
.on('cxReceipt', (receipt) => { | |
console.log(''); | |
console.log('--- cxReceipt ---'); | |
console.log(''); | |
console.log(receipt); | |
console.log(''); | |
}) | |
.on('error', (error) => { | |
console.log(''); | |
console.log('--- error ---'); | |
console.log(''); | |
console.log(error); | |
console.log(''); | |
}); | |
// send the txn, get [Transaction, transactionHash] as result | |
const [sentTxn, txnHash] = await signedTxn.sendTransaction(); | |
// to confirm the result if it is already there | |
const confiremdTxn = await sentTxn.confirm(txnHash); | |
// if the transactino is cross-shard transaction | |
if (!confiremdTxn.isCrossShard()) { | |
if (confiremdTxn.isConfirmed()) { | |
console.log('--- Result ---'); | |
console.log(''); | |
console.log('Normal transaction'); | |
console.log(`${txnHash} is confirmed`); | |
console.log(''); | |
process.exit(); | |
} | |
} | |
if (confiremdTxn.isConfirmed() && confiremdTxn.isCxConfirmed()) { | |
console.log('--- Result ---'); | |
console.log(''); | |
console.log('Cross-Shard transaction'); | |
console.log(`${txnHash} is confirmed`); | |
console.log(''); | |
process.exit(); | |
} | |
} | |
// sending from one18n8e7472pg5fqvcfcr5hg0npquha24wsxmjheg to one1a2rhuaqjcvfu69met9sque2l3w5v9z6qcdcz65 | |
transfer('one12e6w28cphg504nhltjrndt7gz2mmxlpnkqau8s'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment