仮想通貨EOS相場
Anchor

Anchor-Linkを使ってEOS送金するプログラム

前回はAnchor(アンカー)を使ったプログラムをざっくりと紹介しましたが、今回は基本的なEOS(イオス)の動作を一つずつ紐解いていきましょう。

できるだけ誰でもできるようにコピペ形式でも使えるようにしています。

EOS送金プログラムの型

今回もできるだけコピペだけで対応できるようにEOS送金のプログラムの型を紹介したいと思います。

function transfer(sRecAccount, fAmount, sSymbol, sMessage){

 /* 送金枚数を数字型に変換する */
 var num = new Number(fAmount);
 /* nullなら空白にする */
 if(sMessage == null) sMessage = '';

 const action = {
  account: 'eosio.token',
  name: 'transfer',
  authorization: [session.auth],
  data: {
   from: session.auth.actor,
   to: sRecAccount,
   quantity: String(num.toFixed(4)) + ' ' + sSymbol,
   memo: sMessage
  }
 };

 session.transact({action}).then((result) => {
   console.log(result.processed.id);
 });

}

上記を前回のプログラムに貼り付けるだけで動作します。

機能の説明は以下の通りになります。

transfer( sRecAccount, fAmount, sSymbol, sMessage )

■各パラメーターの説明
sRecAccount = 送金先のアカウント名
fAmount = 送金する枚数
sSymbol = トークンシンボル
sMessage = メッセージ(nullを入力すると空白で送信する)

■使い方
(メッセージを添える場合)
transfer(‘eosersbank11’, 1.0000, ‘EOS’, ‘てゃんでぃ!行くぜ!’);
(メッセージを添えない場合)
transfer(‘eosersbank11’, 1.0000, ‘EOS’, null);

フルコード

<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Anchor test</title>
<script src="https://unpkg.com/anchor-link"></script>
<script src="https://unpkg.com/anchor-link-browser-transport"></script>

<script>
    
// アプリ識別子、該当する場合はeosio契約アカウントに設定する必要があります
const identifier = 'dapps_name';
        
// ブラウザのトランスポートを初期化する
const transport = new AnchorLinkBrowserTransport();
        
// リンクを初期化する
const link = new AnchorLink({transport});
        
// ink.restoreSession()を使用して復元された、またはlink.login()で作成されたセッションインスタンス
let session;

// ドキュメントのロード時に呼び出されるセッションの復元を試みます
function restoreSession() {
  link.restoreSession(identifier).then((result) => {
   session = result;
   if (session) { didLogin(); }
  })
}

// ログインしてセッションを保存する(成功した場合)
function login() {
  link.login(identifier).then((result) => {
  session = result.session;
  didLogin();
 })
}

// ログアウトしてストレージからセッションを削除
function logout() {
  document.body.classList.remove('logged-in');
  session.remove();
}

// セッションが復元または作成されたときに呼び出されます
function didLogin() {
  document.getElementById('account-name').textContent = session.auth.actor;
  document.body.classList.add('logged-in');
}

// セッションを使用してトークンを転送する
function transfer(sRecAccount, fAmount, sSymbol, sMessage) {
            
  var num = new Number(fAmount);
  if(sMessage == null) sMessage = '';
            
  const action = {
    account: 'eosio.token',
    name: 'transfer',
    authorization: [session.auth],
    data: {
      from: session.auth.actor,
      to: sRecAccount,
      quantity: String(num.toFixed(4)) + ' ' + sSymbol,
      memo: sMessage
    }
  }
            
  session.transact({action}).then((result) => {
    document.getElementById('log').innerHTML += `Transaction broadcast! ${ result.processed.id }\n`;
    console.log(result.processed.id);
  });
}
</script>

<!-- 画面表示非表示 -->
<style>
.logged-in #login-ui {
  display: none;
}
#app-ui {
  display: none;
}
.logged-in #app-ui {
  display: block;
}
</style>

</head>

<body onload="restoreSession()">

<div id="app-ui">
<p>ようこそ <b id="account-name">名無しさん</b>!</p>
<ul>
<li><button onclick="transfer('eoserscrypto', 0.0001, 'EOS', null)">eoserscryptoに送金する</button></li>
<li><button onclick="logout()">ログアウト</button></li>
</ul>
<pre id="log"></pre>
</div>
<div id="login-ui">
<button onclick="login()">ログイン</button>
</div>

</body>
</html>

最後に

この関数は、ある程度コピペで対応できるようにしています。

次回はステーキングしてリソースを確保する関数を紹介したいと思います。

EOS初心者おすすめ記事