Parallel Testnetのポイ活botを作って3日で1位になった話とか
おはこんばんにちは。
最近暑すぎ&蚊に刺されて全然寝付けないYぶろっくちぇーんです。
今回はParallel Networkというlending系のポイ活をシステム化して3日で1位になった話をしたいと思います。
※既にテストネットは終了しています。
![](https://assets.st-note.com/img/1718300028898-XZbgtSL9ku.png?width=1200)
![](https://assets.st-note.com/img/1718306028970-vxLNGKfi6R.png)
こう思った方もいると重々承知しておりますが、それは申し訳ないです。
ただ、クリプトに手段など問われないと思いますし、何をしようと本来の思想的にはOKだと思ってます。
結局はテストネットですしね。(これ重要)
Parallelのポイントシステム
それは単純明快です。
Faucetしたトークンをsupplyすればするほど貰える
ぼく: じゃあ大量mint繰り返せば良くね?
![](https://assets.st-note.com/img/1718300692541-Xzp9vALOc2.png)
という考えに至った僕は直ぐにコントラ調査を始めました😃
Faucetコントラ調査&実行
Faucetコントラを連打しまくれば行ける!
ってことでサイト上からfaucetしたら使用されるコントラ見つけ、web3.pyで適当にコードを書いてcallしまくりました。
![](https://assets.st-note.com/img/1718301548717-yfM3DdgbIN.png?width=1200)
ここで、ふと違和感に気づきました。
ぼく: これ、TXの数にしてはfaucetされる量少なくね?
![](https://assets.st-note.com/img/1718301026021-b0uH8uZ8DJ.png?width=1200)
実は表に出てるようなFaucetコントラは複数トークンを指定枚数分しかtransferされないようです。
これじゃ、、意味がない!!
![](https://assets.st-note.com/img/1718301059981-omhMV8yioy.png)
ってことで1秒考えた結果
ぼく: じゃあトークン直にmint関数callすれば上限突破できんじゃね?
と思い直ぐにコードを書いて.. (以下略
![](https://assets.st-note.com/img/1718302025099-yCCG0FK7Ke.png?width=1200)
![](https://assets.st-note.com/img/1718302049099-hDNmm7R9RI.png?width=1200)
キタキタ!
100,000,000,000,000,000,000,000,000,000,000,000 WBTCのmintに成功(?)
![](https://assets.st-note.com/img/1718304209066-fxph3cklpG.png)
しかも奇跡的にetherscan上にコントラverifyされており、ABIも関数部分も出されていましたw
![](https://assets.st-note.com/img/1718302209873-yKf8LlWn0i.png)
つまりこれは、、そういう事ですよね!parallel運営さん♡
![](https://assets.st-note.com/img/1718302137139-9m3wEPw8oL.png)
ここで、また一つ気づきました
![](https://assets.st-note.com/img/1718302356373-YHNFONmG9h.png?width=1200)
ぼく: similar codeだと?
ってことは他のrsETHとかDAIとかのコントラも一緒なのか?
コントラアドレスへ飛ぶと
![](https://assets.st-note.com/img/1718302475312-Xvz7B0iewd.png?width=1200)
はい。faucet対象のトークンは全て同様のコントラのようです。
まあそりゃそうか。
ただ、正直US$ベースでポイント付与の付与枚数も変わってくるらしく、全てのトークンを分散して入れるよりwBTCに固着させて大量にmintし攻めた方がいいなと思った為、結局いらない気づきでしたw
挙動と手法は理解したのであとはスクリプトを実行させ続けました。
おもしろTXたち
![](https://assets.st-note.com/img/1718302731678-vHbOJuAbFs.png?width=1200)
![](https://assets.st-note.com/img/1718302771068-FneDMwqWIA.png?width=1200)
![](https://assets.st-note.com/img/1718302794888-R3oXLbjm0D.png?width=1200)
![](https://assets.st-note.com/img/1718302900200-9o6QAvHLtS.png?width=1200)
30分ほど放置していたら結構な枚数が溜まっていました。
現在もホルダー順的にはbridgeコントラの次に持ってるらしいw
![](https://assets.st-note.com/img/1718303004639-0KUJXHZFrR.png?width=1200)
そんな感じでFaucet調査と実行はとりあえず解決しました。
今では不要説濃厚ですが、その時使用したコードを共有しておきます。
※実行する際は自己責任でお願いします
当時のコード
import time
import json
from web3 import Web3
with open('config.json') as f:
config = json.load(f)
infura_url = config['infura_url']
contract_address = config['contract_address']
contract_abi = config['contract_abi']
account_address = config['account_address']
private_key = config['private_key']
mint_amount = config['mint_amount']
w3 = Web3(Web3.HTTPProvider(infura_url))
contract = w3.eth.contract(address=contract_address, abi=contract_abi)
mint_amount_wei = mint_amount * 10**8
mint_amount_hex = w3.to_hex(mint_amount_wei)
mint_amount_padded = mint_amount_hex[2:].zfill(64)
mint_signature = '0xa0712d68'
nonce = w3.eth.get_transaction_count(account_address)
def get_dynamic_gas_price():
gas_price = w3.eth.gas_price
gas_price_multiplier = 3.5
dynamic_gas_price = int(gas_price * gas_price_multiplier)
return dynamic_gas_price
def call_mint_function():
global nonce
try:
dynamic_gas_price = get_dynamic_gas_price()
print(f"\033[94mCalling mint function with nonce: {nonce}\033[0m")
transaction = contract.functions.mint(mint_amount_wei).build_transaction({
'from': account_address,
'gas': 500000,
'gasPrice': dynamic_gas_price,
'nonce': nonce,
})
signed_transaction = w3.eth.account.sign_transaction(transaction, private_key)
transaction_hash = w3.eth.send_raw_transaction(signed_transaction.rawTransaction)
print(f"\033[92mTransaction sent. Hash: {transaction_hash.hex()}\033[0m")
transaction_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash)
print(f"Transaction successful. Receipt: {transaction_receipt}")
nonce += 1
except Exception as e:
print(f"Transaction failed. Error: {e}")
nonce = w3.eth.get_transaction_count(account_address)
while True:
call_mint_function()
time.sleep(5)
基本的にGASゲーでもあるので、3.5倍した値を代入しています。
シグネチャですが、このトークンコントラにはmint関数が2つあるので、シグネチャ分けしています。
(正直ABI部分で必要なmint関数だけ入れれば解決する話だった。)
INFURA、ABI、各種アドレス、プライベートキーは設定ファイルに持たせてます。
本当は環境変数に格納した方が良いですが、めんどいのでやってないです。
※一応dotenv使えば設定ファイル感覚で使えます。
Parallelへbridge
Sepoliaで保有していても意味がないので、Parallelチェーンへbridgeしていきます。
send関数を使用してbridgeしているので、必要な引数を取得するため適当なTXをdecodeしました。
![](https://assets.st-note.com/img/1718304344646-3Y4q8DFZEu.png?width=1200)
![](https://assets.st-note.com/img/1718304316026-jBIF8cLYLY.png)
さっぱりわからんですが、パラメータ同一にしてamountだけuint256ベースで変えれば行けるやろ!!
気合いだ!気合い!!
![](https://assets.st-note.com/img/1718304461069-5dlcQYcqw7.png?width=1200)
![](https://assets.st-note.com/img/1718304478234-AxeZyYLg1X.png)
ってことで何回繰り返しても実行できなかったので手動でbridgeしました
そして、ある程度bridge回数を重ねて、supplyした結果。。
最初の画像に至ります。
![](https://assets.st-note.com/img/1718305367034-JRgUR7MRkr.png?width=1200)
こんな感じでポイ活も効率化していきましょう。
(こんなあからさまにすると除外されそうなので、適度に。)
今の時代、ChatGPTやClaudeAIを使えば割と良いコードを生成してくれますし。
個人的にClaudeAIのOpus、Hirukuモデルを多用しております。!
ってことでお疲れした〜。
関係のない余談 x3
最近TikTokで少し流れてきた夏トンを観たのですが、結構良かったです!
(全然クリプト関係ない)
![](https://assets.st-note.com/img/1718308351764-WnJc6KwgPN.png?width=1200)
ヒロインである花城あんずの雰囲気が割と個人的に好きでした。
クール系最高です😸
一つ言うならば最後の終わり方が映画だと若干微妙だったんですよね。
原作小説もそのあと読んだんですが、結構変わってました。
良曲
あと、上場戦botに関してもRustからPythonに移行し直しました。
https://x.com/yblockchain_/status/1799723746665840804
0.08
— yblockchain_🧬 (@yblockchain_) June 9, 2024
0.09 pic.twitter.com/kaxMRUGFT7
API反映の関係上seleniumで脳筋GETでないと遅いので。。
ただ、現時点でも十分早いのですが一回目の本番で多少後に注文されているのを確認してしまったため、もう少し処理を見直しています。
まあpythonはインタプリタ言語なので遅いとか言われますが、正直numPy使えば全然戦えると信じています。
あと、3.11verから改善しているみたいですし。
趣味の領域ですが、AI系も再開して触ってたりします
一応別垢作ったのでこちらでAI系のシステム作って共有したりするかもです(時間あれば)
![](https://assets.st-note.com/img/1718308909415-QM4eLFTy9l.png?width=1200)
現在開発途中ですが、
OpenAI whisper-1でSTT -> GPT4oでレスポンス生成 -> ElevenLabsでTTS
このような一連の流れでvoice cloneした音声でAIと話せるようなシステムをpythonのflaskを使用してブラウザ上でやってます!
デモ映像
全てAPIで完結してるので、案外楽でした。
今後の改善点としてはレスポンスの処理速度向上です。
やはり現在だと無音が3秒間続いたらSTOPして処理開始させてるので、ラグがどうしても生じます。
mp3にコンバートするのではなく、ストリーミング形式だと早くなるのでしょうか?
日々研究です。
この記事が気に入ったらサポートをしてみませんか?