Predictionの自動化 [@PancakeSwap 🥞 ]
最近PancakeSwapに実装されたPredictionという機能があります。これは所謂バイナリーオプションと呼ばれるもので、5分後のBNB価格を予想する博打ゲームです。
正直不具合も多いのですが、UIがとても綺麗で楽しいです。これで一発当てようとしている方も多いのではないでしょうか。
今回はGWの自由研究ということで、このPredictionを自動化してみました。プログラムが延々に賭け続けます。資金がなくなるまで...
ロジック
単純に常に"UP"に賭け続けるというロジックも検討したのですが、それでは損益グラフとBNBチャートの形が一致してしまい面白くありません。
ということで今回はみんなが思っている方向と逆に賭けることにしました。具体的なロジックとしては「残り30秒以下でPayoutが2倍以上のとき、その方向に賭ける」というものです。
賭け金は残高の1/20とします。
作り方
BSCチェーン上にデプロイされているコントラクトを実行するだけなので、web3.jsを使って簡単に作ることができます。
これがPredictionのコントラクトです。`betBull`や`betBear`関数を叩くだけでエントリーできます。
また、
・過去に自分がエントリーしたエポック
・現在のエポックのPayoutデータ
これらのデータはGraphQLのエンドポイントから取得できます。詳しくはPancakeSwapのフロントの挙動を実際に見てみてください。
例えば、過去に自分がエントリーしたエポックで予想が当たったもののうち、まだ報酬を受け取ってないものを全て回収するコードはこんな感じになります。
async function claimAll(web3, contract, contractAddress, account, pk) {
console.log("未取得の報酬を取得")
const payload = {"query":"\n query getBetHistory($first: Int!, $skip: Int!, $where: Bet_filter) {\n bets(first: $first, skip: $skip, where: $where) {\n \n id\n hash \n amount\n position\n claimed\n\n round {\n \n id\n epoch\n failed\n startAt\n startBlock\n lockAt\n lockBlock\n lockPrice\n endAt\n endBlock\n closePrice\n totalBets\n totalAmount\n bullBets\n bullAmount\n bearBets\n bearAmount\n position\n\n }\n user {\n \n id\n address\n block\n totalBets\n totalBNB\n\n } \n }\n }\n ","variables":{"first":1000,"skip":0,"where":{"user":"0xb8cc046a06b66f68e03f88a92efbea050e6ea11a","claimed":false}}}
const op = {
method: 'POST',
uri: graphQLEndpoint,
body: payload,
json: true
}
const unclaimedBets = await requestPromise(op)
for(let i=0; i<unclaimedBets.data.bets.length; i++) {
const unclaimed = unclaimedBets.data.bets[i]
if(unclaimed.claimed == false && unclaimed.position == unclaimed.round.position) {
const epoch = unclaimed.round.epoch
const transaction = contract.methods.claim(epoch)
const options = {
from: account.address,
to: contractAddress,
data : transaction.encodeABI(),
gas : 140000,
};
const signed = await web3.eth.accounts.signTransaction(options, pk)
await web3.eth.sendSignedTransaction(signed.rawTransaction)
}
}
}
結果
検証中です。資金は2BNB(約14万円!)からスタートしました。
以下のアドレスで実際の様子を確認することができます。
たぶん全部なくなると思います。万が一100BNBまで行ったらプログラムを止めます。見守っててください。
続きは全く関係ない今年の予言です。
ありがとうございました。