Skip to content

Instantly share code, notes, and snippets.

@daiki44
Created September 8, 2018 10:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daiki44/21ed2ffdcf85613c9bf0987d4dcbbca5 to your computer and use it in GitHub Desktop.
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/
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