前回は仮想通貨EOS(イオス)をScatter(スキャッター)上でステーキング、RAM購入までプログラミングを学んだと思います。
今回はScatterを介してこの全ての処理を組み合わせてEOSアカウントを作成していきます。
EOSアカウントを作成するプログラム
それでは早速Scatter上でEOSアカウントを作成するプログラムを組んでいきましょう。
EOSアカウントを作成するコードは以下のとおりです。
function create_account(sCreateAccount, sOwnerPublickey, sActivePublickey, iRamByte, fNetQuantity, fCpuQuantity, bTransfer){
/* Scatterに接続されていなかったら処理を終了する。 */
if(account == null) return false;
/* NETに割り振る枚数を数字型にする */
var nNum = new Number(fNetQuantity);
/* CPUに割り振る枚数を数字型にする */
var cNum = new Number(fCpuQuantity);
/* 転送フラグ変数を定義する */
var sendflug = 0;
if(bTransfer == false)
sendflug = 1;
/* EOSアカウントを作成する */
eos.transaction(tr => {
/* EOSアカウントを作成する */
tr.newaccount({
creator: account.name,
name: sCreateAccount,
owner: sOwnerPublickey,
active: sActivePublickey
});
/* 新規アカウントにRAMを送付する */
tr.buyrambytes({
payer: account.name,
receiver: sCreateAccount,
bytes: parseInt(iRamByte)
});
/* 新規アカウントにCPUとNET分のリソースを配布する。 */
tr.delegatebw({
from: account.name,
receiver: sCreateAccount,
stake_net_quantity: String(nNum.toFixed(4)) + ' EOS',
stake_cpu_quantity: String(cNum.toFixed(4)) + ' EOS',
transfer: sendflug
});
}).then(function(data){
/* ステーキングに成功したら結果をコンソール上に表示する */
console.log("Done:" + data);
}).catch(function(error){
/* ステーキングに失敗したら結果をコンソール上に表示する */
console.log("Error:" + error);
});
}
上記をコピペで追加すれば使えるようになります。
関数の使い方は以下のようになります。
create_account(sCreateAccount, sOwnerPublickey, sActivePublickey, iRamByte, fNetQuantity, fCpuQuantity, bTransfer)
■各パラメーターの説明
sCreateAccount = 文字列:新規作成するEOSアカウント名(a-z,5-1)12文字
sOwnerPublickey = 文字列:EOSで始まるオーナー公開鍵を入力する。
sActivePublickey = 文字列:EOSで始まるアクティブ公開鍵を入力する。
iRamByte = 整数型:RAM購入をするバイト数を入力する。
fNetQuantity = 浮動小数点型:NETに割り振る枚数を入力する。
fCpuQuantity = 浮動小数点型:CPUに割り振る枚数を入力する。
bTransfer = BOOL型:trueならEOSを転送しない、falseならEOSを転送する。
■使い方
(EOSを新規アカウントにステーク分のEOSを送金する場合)
create_account(‘createa12345’, ‘EOS6LYC,,,,,,,’, ‘EOS7A1q,,,,,,,’, 8000, 0.5000, 0.5000, false);
(EOSを新規アカウントにステーク分のEOSを貸す場合)
create_account(‘createa12345’, ‘EOS6LYC,,,,,,,’, ‘EOS7A1q,,,,,,,’, 8000, 0.5000, 0.5000, true);
※OnClickなどのHTMLタグ内に明記する場合は、シングルクォーテーション’で明記してください。
フルコード
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>scatter test</title>
<!-- EOSとScatterの接続モジュールを読み込む -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/eos.min.js"></script>
<script src="https://cdn.scattercdn.com/file/scatter-cdn/js/latest/scatterjs-core.min.js"></script>
<script src="https://cdn.scattercdn.com/file/scatter-cdn/js/latest/scatterjs-plugin-eosjs.min.js"></script>
<script>
/* 各パラメーターの初期化 */
ScatterJS.plugins(new ScatterEOS());
var eos = null;
var account = null;
var options = null;
/* EOSメインネットブロックチェーンのネットワーク情報を設定 */
const network = ScatterJS.Network.fromJson({
blockchain:'eos',
chainId:'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906',
host:'nodes.get-scatter.com',
port:443,
protocol:'https'
}); //mainnet
/* Scatterにログインする関数 */
function scatter_login(){
ScatterJS.connect('YourAppName', {network}).then(connected => {
if(!connected) return console.error('no scatter');
eos = ScatterJS.eos(network, Eos);
ScatterJS.login().then(id => {
if(!id) return console.error('no identity');
account = ScatterJS.account('eos');
options = {authorization:[`${account.name}@${account.authority}`]};
document.getElementById('account').innerHTML = JSON.stringify(account);
});
});
}
/* EOSアカウントを作成する関数 */
function create_account(sCreateAccount, sOwnerPublickey, sActivePublickey, iRamByte, fNetQuantity, fCpuQuantity, bTransfer){
if(account == null) return false;
var nNum = new Number(fNetQuantity);
var cNum = new Number(fCpuQuantity);
var sendflug = 0;
if(bTransfer == false)
sendflug = 1;
eos.transaction(tr => {
tr.newaccount({
creator: account.name,
name: sCreateAccount,
owner: sOwnerPublickey,
active: sActivePublickey
});
tr.buyrambytes({
payer: account.name,
receiver: sCreateAccount,
bytes: parseInt(iRamByte)
});
tr.delegatebw({
from: account.name,
receiver: sCreateAccount,
stake_net_quantity: String(nNum.toFixed(4)) + ' EOS',
stake_cpu_quantity: String(cNum.toFixed(4)) + ' EOS',
transfer: sendflug
});
}).then(function(data){
console.log("Done:" + data);
document.getElementById('result').innerHTML = "DONE:" + JSON.stringify(data);
}).catch(function(error){
console.log("Error:" + error);
document.getElementById('result').innerHTML = "ERROR:" + JSON.stringify(error);
});
}
/* Scatterからログアウトする関数 */
function scatter_logout(){
ScatterJS.scatter.forgetIdentity()
ScatterJS.scatter.logout();
account = null;
options = null;
document.getElementById('account').innerHTML = "no account";
document.getElementById('result').innerHTML = "";
}
</script>
</head>
<body>
<h1>scatter test</h1>
<!-- Scatterをログイン・ログアウトするボタン -->
<button type="button" name="name" value="value" onClick="scatter_login();">Scatter Login</button><br>
<button type="button" name="name" value="value" onClick="scatter_logout();">Scatter Loout</button><br>
<!-- クリックしたらhelloworld12という新規EOSアカウントを作成するボタン -->
<button type="button" name="name" value="value" onClick="create_account('helloworld12', 'EOS5Zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'EOS5Yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 8000, 0.5000, 0.5000, false);">create eosaccount</button><br>
<!-- ログインしているかしていないかを表示する -->
<div id="account">no account</div><br>
<!-- 実行結果を表示する -->
<div id="result"></div><br>
</body>
</html>
最後に
この関数もコピペだけで動作するように作成しました。
これまでに紹介したScatterプログラムをうまく組み合わせれば面白いサービスを展開できると思います。
遊び程度でもいいので色々試してみてください。