eosjs-16.0.9

Scatterで簡単ステーキングプログラミング(eosjs v16.0.9)

前回は仮想通貨EOS(イオス)をScatter(スキャッター)上で送金するプログラミングをやっていきました。

今回はScatterを介してEOSの送金などに重要なリソースを確保するステーキングするプログラミングを行っていきたいと思います。

EOSをステーキングするプログラム

それでは早速仮想通貨EOSの送金に重要なリソースを確保するためのステーキングをScatter上で走らせるプログラムを組んでいきましょう。

ステーキングするコードは以下のとおりです。

/* EOSをステーキングする関数 */
function stake_resources(sRecAccount, 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 => {
    tr.delegatebw({
      from: account.name,
      receiver: sRecAccount,
      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);
  });
}

上記をコピペで追加すれば使えるようになります。
関数の使い方は以下のようになります。

stake_resources(sRecAccount, fNetQuantity, fCpuQuantity, bTransfer)

■各パラメーターの説明
sRecAccount = 文字列:ステーキングするEOSアカウント(原則自分のアカウントを指定する)
fNetQuantity = 浮動小数点型:NETに割り振る枚数を入力する。
fCpuQuantity = 浮動小数点型:CPUに割り振る枚数を入力する。
bTransfer = BOOL型:trueならEOSを転送しない、falseならEOSを転送する。

■使い方
(EOSを転送しない場合)
stake_resources(‘eosersbank11’, 0.0001, 0.0001, true);
(EOSをステーク先に転送する場合)
stake_resources(‘eosersbank12’, 0.0001, 0.0001, false);

※OnClickなどのHTMLタグ内に明記する場合は、シングルクォーテーション’で明記してください。
※falseの場合、自分に指定するとエラーが出ます。

フルコード

<!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 stake_resources(sRecAccount, 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.delegatebw({
      from: account.name,
      receiver: sRecAccount,
      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>

<!-- クリックしたらeosersbank11アカウント(自分)にCPUとNET両方0.0001EOSをステーキングするボタン(転送なし) -->
<button type="button" name="name" value="value" onClick="stake_resources('eosersbank11', 0.0001, 0.0001, true);">staking</button><br>

<!-- ログインしているかしていないかを表示する -->
<div id="account">no account</div><br>
<!-- 実行結果を表示する -->
<div id="result"></div><br>
</body>
</html>

最後に

この関数も前回のコードと同様にコピペだけで動作するように作成しました。

もうすこし作り込こんでテキストボックスを用意して、そこにCPU、NET枚数を入力してボタンを押したらステーキングするというものも作れると思います。

次回はステーキングを解除するアンステークの関数を行いたいと思います。

Scatterおすすめ記事(eosjs v16.0.9)