Created
September 8, 2018 10:21
-
-
Save daiki44/21ed2ffdcf85613c9bf0987d4dcbbca5 to your computer and use it in GitHub Desktop.
【NEM】NEM-sdk を使って特定アドレスへ モザイク を送金する ref: https://daiki-sekiguchi.com/2018/09/08/nem-sdk-mosaic-transaction-send/
This file contains 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 nem from 'nem-sdk'; | |
// EndpointをTestnetに指定します | |
// 第1引数はTestnet用のデフォルトのノード | |
// 第2引数はデフォルトのポート(7890) | |
const endpoint = nem.model.objects.create('endpoint')(nem.model.nodes.defaultTestnet, nem.model.nodes.defaultPort); | |
async function main() { | |
// TODO: 自分の送金したい先のアドレスに変更してください | |
// 送金先のアドレス | |
const toAddress = 'TAHPGS7CKZAERDU5RGHRCGN4DYGXRLQXO5CPNWIP'; | |
// 送金額 | |
const sendAmount = 1; | |
// 送金の際に指定するメッセージ(空文字でも可) | |
const sendMsg = 'Hello World!'; | |
// TODO: 自分の送金元ウォレットのパスワードを入力してください | |
// 送金元ウォレットのパスワード | |
const password = ''; | |
// TODO: 自分の送金元の秘密鍵を入力してください | |
// 送金元の秘密鍵 | |
const privateKey = ''; | |
// パスワードと秘密鍵をセットにしたオブジェクト | |
const common = nem.model.objects.create('common')(password, privateKey); | |
// TODO: 送りたいモザイクのネームスペースを入力してください | |
// ネームスペース | |
const yourMosaicNamespace = 'daiki-sekiguchi'; | |
// TODO: 送りたいモザイクのモザイク名を入力してください | |
// モザイク名 | |
const yourMosaicName = 'test'; | |
// Transactionの作成 | |
let transferTransaction = nem.model.objects.create('transferTransaction')(toAddress, sendAmount, sendMsg); | |
// XEM mosaicを付与する | |
const xemMozaic = nem.model.objects.create('mosaicAttachment')('nem', 'xem', sendAmount * 1000000); | |
transferTransaction.mosaics.push(xemMozaic); | |
// 送りたいXEM以外のmosaicを付与する | |
const yourMosaic = nem.model.objects.create('mosaicAttachment')(yourMosaicNamespace, yourMosaicName, 10000); | |
transferTransaction.mosaics.push(yourMosaic); | |
// 手数料を正確に計算するためにモザイクの定義を取得する | |
let mosaicDefinitionMetaDataPair = nem.model.objects.get('mosaicDefinitionMetaDataPair'); | |
nem.com.requests.namespace.mosaicDefinitions(endpoint, yourMosaic.mosaicId.namespaceId).then(res => { | |
// モザイク定義を取得してモザイク定義オブジェクトへ格納する | |
const neededDefinition = nem.utils.helpers.searchMosaicDefinitionArray(res.data, [yourMosaicName]); | |
// モザイク定義オブジェクトで使用するため、モザイクの名前を取得 | |
const fullMosaicName = nem.utils.format.mosaicIdToName(yourMosaic.mosaicId); | |
// モザイクの存在確認 | |
if (undefined === neededDefinition[fullMosaicName]) { | |
return console.log('Mosaic not found !'); | |
} | |
// モザイクの定義をモザイク定義オブジェクトへ追加する | |
mosaicDefinitionMetaDataPair[fullMosaicName] = {}; | |
mosaicDefinitionMetaDataPair[fullMosaicName].mosaicDefinition = neededDefinition[fullMosaicName]; | |
nem.com.requests.mosaic.supply(endpoint, fullMosaicName).then(supplyRes => { | |
// 供給量をmosaicDefinitionMetaDataPairに設定する。 | |
mosaicDefinitionMetaDataPair['nem:xem'].supply = 8999999999; | |
mosaicDefinitionMetaDataPair[fullMosaicName].supply = supplyRes.supply; | |
// 署名をしてTransactionを送信する準備を完了する | |
const transactionEntity = nem.model.transactions.prepare('mosaicTransferTransaction')(common, transferTransaction, mosaicDefinitionMetaDataPair, nem.model.network.data.testnet.id); | |
// Transactionをブロードキャストしてネットワークへ公開する | |
nem.model.transactions.send(common, transactionEntity, endpoint).then(sendRes => { | |
console.log('sendRes:', sendRes); | |
}).catch(sendErr => { | |
console.log('sendError:', sendErr); | |
}); | |
}).catch(supplyErr => { | |
console.log('supplyErr:', supplyErr); | |
}); | |
}).catch(err => { | |
console.log('mosaicDefinitionsError:', err); | |
}); | |
} | |
main(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment