深入了解區塊鏈(三) - 用Ganache來模擬任意地址的身分

更新於 發佈於 閱讀時間約 8 分鐘

前言

很高興能再次與您見面,感謝您支持這系列的文章。在前幾篇的文章中。有和各位分享了使用Ganache來模擬一個以太坊主網進行交易,也嘗試使用了web3.py來開發區塊鏈互動程式。相信對您而言,一定有更深入探索區塊鏈交易的需求。本篇想和各位介紹一個Ganache的神奇功能:解鎖任意帳號

解鎖任意帳號?

不知各位是否記得在上一篇文章,我們在寫交易程式過程中,有對交易的內容以私鑰進行簽名。這步驟對於區塊鏈的安全性而言非常重要,這步驟可以讓礦工們驗證這則交易是否由本人所發出,他人是沒有辦法偽造這筆交易的。
但是在模擬的環境中,若我們想要模擬某個帳號的行為,或是以特定身分來取得特定智能合約的權限,這是否能夠做到的呢?Ganache能為我們達成這項需求。
接下來我們會設定一個情境來說明這項功能

跟幣安借點錢花花

在區塊鏈世界裡,相信各位對幣安(Binance)都不陌生。我們是否有辦法在我們的模擬網路中,透過幣安的帳號從它的池子裡分一些Token給我們使用?
PS. 此模擬情境不會真正的讓幣安轉錢給你,僅會在你的模擬網路中曇花一現
這樣的實驗主要是為了探討合約的安全性,若在您的實驗中有發現任何的合約漏洞,不妨將這個漏洞資訊提供給合約擁有者,為區塊鏈安全盡一份心力!
首先我們先找到其中一個幣安所使用的帳號,我們將使用它進行範例
合約地址:0x28C6c06298d514Db089934071355E5743bf21d60
  • 為了解鎖特定帳號,需要在Ganache啟動時加入以下參數(wallet.unlockedAccounts)
ganache --fork.network mainnet \
--chain.networkId 1 \
--accounts 10 \
--wallet.seed 1337 \
--port 8545 \
--wallet.unlockedAccounts 0x28C6c06298d514Db089934071355E5743bf21d60
Ganache僅能在啟動時解鎖特定帳號,現沒法在執行過程中動態解鎖帳號,有些可惜。
  • 首先做一些初始化
from web3 import HTTPProvider, Web3
import json
import time

#連線到剛啟動的Ganache RPC Server
web3 = Web3(HTTPProvider('http://127.0.0.1:8545'))
  • 假如我們想要從幣安的這個帳號轉1,000USDT到我們的測試帳號,我們需要先拿到USDT合約的ABI (方式同上一篇文章所述),您一樣可以從etherscan.io得知
#設定相關地址,userAcc和userKey為您Ganache生成的測試地址
userAcc = web3.toChecksumAddress('0xC459cc3AC9f8462Be2EF00aAD02fAc7af2e97b14')
userKey = '0xda09f8cdec20b7c8334ce05b27e6797bef01c1ad79c59381666467552c5012e3'

#USDT合約地址
USDT_ADDR = web3.toChecksumAddress('0xdac17f958d2ee523a2206206994597c13d831ec7')
#幣安錢包地址
BINANCE_ADDR = Web3.toChecksumAddress('0x28C6c06298d514Db089934071355E5743bf21d60')
  • 我們可以來開始建立交易了。在ERC20的規範中,若要進行Token的轉移,您需要先approve(允許)特定金額的轉移後,才能進行transfer(轉移)。
  • 首先先來導入ABI與實例化合約
#USDT合約的ABI內容請自行複製並貼到usdt.json檔案中,透過檔案內容來讀取JSON
abi = json.load(open('usdt.json'))
usdt_contract = web3.eth.contract(address=USDT_ADDR, abi=abi)
  • 進行approve動作
approve = usdt_contract.functions.approve(
    BINANCE_ADDR, #允許哪個帳號可以進行轉移
    1000 * 1000000 #允許多少
)
#我們使用幣安身分來做為FROM
txn = approve.buildTransaction({
    'from': web3.toChecksumAddress(BINANCE_ADDR),
    'value': web3.toWei(0,'ether'),
    'gasPrice': web3.toWei('30','gwei'),
    "gas": 3000000,
    'nonce': web3.eth.get_transaction_count(BINANCE_ADDR)
})
#因為幣安的帳號已經被解鎖,所以可以不用對交易進行簽名,直接發送交易即可
web3.eth.send_transaction(txn)
  • 進行transfer動作
transfer = usdt_contract.functions.transfer(
    userAcc, #轉給誰
    1000 * 1000000 #轉多少
)
#一樣使用幣安身分來做為FROM
txn = transfer.buildTransaction({
    'from': web3.toChecksumAddress(BINANCE_ADDR),
    'value': web3.toWei(0,'ether'),
    'gasPrice': web3.toWei('30','gwei'),
    "gas": 3000000,
    'nonce': web3.eth.get_transaction_count(BINANCE_ADDR)
})
#因為幣安的帳號已經被解鎖,所以可以不用對交易進行簽名,直接發送交易即可
web3.eth.send_transaction(txn)
  • 交易成功,我們可以回到Metamask中察看交易結果是不是符合預期呢?
成功從幣安帳號轉來的USDT

後記

從上面的例子可以看到,經解鎖後的帳號,Ganache都不會要求交易的FROM地址進行簽名驗證了。代表我們可以對任意的地址取得任意的權限,例如:
  • 某個NFT只有Owner可以進行mint,我們可以解鎖該Owner的帳號來發起mint
  • 執行任意合約使用msg.sender進行權限控管的功能
  • 對任意地址進行Peer to peer的ETH交易
  • ...
充滿無限想像的可玩性,就待您慢慢發掘與研究。這功能對於研究某些鏈上合約的弱點非常有幫助,尤其在您沒有該合約的擁有權時。
感謝您閱讀到本系列的第三篇文章,希望這期帶來的內容對您而言也是有趣的。預計下一篇內容會針對交易於EVM中的行為做更進一步的了解,期待與您再一次的相見。

作者Steve目前任職於趨勢科技區塊鏈安全研究小組,專注於區塊鏈合約安全與與相關技術,如果喜歡我的文章,或是想獲得更多區塊鏈詐騙事件懶人包,歡迎關注我的帳號
另外,我已經加入由趨勢科技防詐達人所成立的方格子專題-《區塊鏈生存守則》,在那裡我會跟其他優質的創作者一起帶大家深入瞭解區塊鏈,並隨時向大家更新區塊鏈資安事件
> 追蹤《區塊鏈生存守則》學習如何在區塊鏈的世界保護自己
> 關注防詐達人獲得其他最新詐騙情報
avatar-img
33會員
176內容數
我們整理了web3相關的熱門資安問題,包含加密貨幣投資詐騙、盜版NFT、空投釣魚和區塊鏈重大資安事件懶人包等等,並提供最完整的辨識方法教學,讓大家從0到1學習如何保護自己
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
防詐達人的沙龍 的其他內容
在上一篇文章中,有和您分享了使用Ganache模擬了一個以太坊主網。想必您已經迫不及待的想對它進行更深入的了解了。本篇預計會使用Python來和您建立好的模擬網路進行互動。在開發套件的細節上我們並不會很深入的地為您進行解釋,而會透過一些簡單的例子來引導一個學習的方向。
詐騙加密貨幣交易平台BitVex利用Deepfake影片,在YouTube冒用馬斯克、幣安執行長趙長鵬以及方舟投資執行長Cathie Wood製造假影片宣傳BitVex,並宣稱可以獲得11%的獲利,事實上BitVex根本是加密貨幣釣魚網站,企圖詐騙民眾金錢、個人隱私資料及帳號密碼
所以礦工的挖礦能力和以太坊區塊難度的增減就造成生成區塊的時間跟預期結果不一樣的狀況,不過很少有人會去理會這種狀況,偶爾有幾個區塊就是會延遲發生,本文想知道他延遲發生的分配如何?
近期藝人、網紅們和幣圈資深玩家的虛擬貨幣錢包被盜,裡面的NFT或虛擬貨幣被轉走的案件頻傳,動輒損失幾千萬,擔心自己成為下一個受害者?趕快跟著防詐達人了解MetaMask小狐狸錢包是什麼?它如何運作?以及詐騙集團是用什麼手法把你的錢包騙到手的?看完這個MetaMask懶人包再也不擔心錢包被盜
關於乙太坊上的交易,通常我們都會到etherscan.io這個網站來進行確認。但初入區塊鏈的朋友們往往看到裡面一大堆的資訊,除了from和to外可能都是一頭霧水。想多了解些相關知識又不知如何下手才好,因此動念寫下一些本人初學區塊鏈時可能用來切入的一些工具,來和各位同好分享。
想打入幣圈獲得交流與學習,但要小心!詐騙集團其實就在你左右,有時甚至會在社群假裝客服,推出「幣安五週年回饋用戶BNB限時活動」,你以為你是客服選中的幸運兒,你正受到資產被洗劫的風險
在上一篇文章中,有和您分享了使用Ganache模擬了一個以太坊主網。想必您已經迫不及待的想對它進行更深入的了解了。本篇預計會使用Python來和您建立好的模擬網路進行互動。在開發套件的細節上我們並不會很深入的地為您進行解釋,而會透過一些簡單的例子來引導一個學習的方向。
詐騙加密貨幣交易平台BitVex利用Deepfake影片,在YouTube冒用馬斯克、幣安執行長趙長鵬以及方舟投資執行長Cathie Wood製造假影片宣傳BitVex,並宣稱可以獲得11%的獲利,事實上BitVex根本是加密貨幣釣魚網站,企圖詐騙民眾金錢、個人隱私資料及帳號密碼
所以礦工的挖礦能力和以太坊區塊難度的增減就造成生成區塊的時間跟預期結果不一樣的狀況,不過很少有人會去理會這種狀況,偶爾有幾個區塊就是會延遲發生,本文想知道他延遲發生的分配如何?
近期藝人、網紅們和幣圈資深玩家的虛擬貨幣錢包被盜,裡面的NFT或虛擬貨幣被轉走的案件頻傳,動輒損失幾千萬,擔心自己成為下一個受害者?趕快跟著防詐達人了解MetaMask小狐狸錢包是什麼?它如何運作?以及詐騙集團是用什麼手法把你的錢包騙到手的?看完這個MetaMask懶人包再也不擔心錢包被盜
關於乙太坊上的交易,通常我們都會到etherscan.io這個網站來進行確認。但初入區塊鏈的朋友們往往看到裡面一大堆的資訊,除了from和to外可能都是一頭霧水。想多了解些相關知識又不知如何下手才好,因此動念寫下一些本人初學區塊鏈時可能用來切入的一些工具,來和各位同好分享。
想打入幣圈獲得交流與學習,但要小心!詐騙集團其實就在你左右,有時甚至會在社群假裝客服,推出「幣安五週年回饋用戶BNB限時活動」,你以為你是客服選中的幸運兒,你正受到資產被洗劫的風險
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文指导如何添加自定义公链,介绍两种方法:通过 Chainlist 添加和手动设置,支持添加多种公链节点,包括以太坊、币安智能链、火币生态链等,方便用户在浏览器中使用自定义公链。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码
Thumbnail
以太坊是一种公开的区块链网络,因此在默认情况下,其交易和账户信息是公开可见的,然而,为了提供更好的隐私保护,一些解决方案已经被开发出来,很多投资者都想要知道这个以太坊隐私解决方案是什么?下面就让小编来为大家详细介绍一下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享
在註冊幣安時,一定要記得使用推薦碼(邀請碼)註冊,才有機會獲得折扣。 自行到幣安官網註冊,是沒有辦法獲得手續費折扣的,一定要使用推薦碼(註冊碼)才可以喔! 可以手動輸入L0Y7UC98
Thumbnail
幣安目前是全球最大的虛擬貨幣投資交易所,今天Jerry要來跟大家教學幣安(Binance)開戶註冊教學以及帳戶驗證,以及手續費的折扣優惠碼,輸入即可享有終身手續費折扣! 如果想要入門虛擬貨幣投資的朋友,一起來看看如何註冊幣安開啟虛擬貨幣投資吧 Jerry幣安推薦邀請碼 BNEYPUJ9。 完成
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文指导如何添加自定义公链,介绍两种方法:通过 Chainlist 添加和手动设置,支持添加多种公链节点,包括以太坊、币安智能链、火币生态链等,方便用户在浏览器中使用自定义公链。 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属邀请码
Thumbnail
以太坊是一种公开的区块链网络,因此在默认情况下,其交易和账户信息是公开可见的,然而,为了提供更好的隐私保护,一些解决方案已经被开发出来,很多投资者都想要知道这个以太坊隐私解决方案是什么?下面就让小编来为大家详细介绍一下 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享
在註冊幣安時,一定要記得使用推薦碼(邀請碼)註冊,才有機會獲得折扣。 自行到幣安官網註冊,是沒有辦法獲得手續費折扣的,一定要使用推薦碼(註冊碼)才可以喔! 可以手動輸入L0Y7UC98
Thumbnail
幣安目前是全球最大的虛擬貨幣投資交易所,今天Jerry要來跟大家教學幣安(Binance)開戶註冊教學以及帳戶驗證,以及手續費的折扣優惠碼,輸入即可享有終身手續費折扣! 如果想要入門虛擬貨幣投資的朋友,一起來看看如何註冊幣安開啟虛擬貨幣投資吧 Jerry幣安推薦邀請碼 BNEYPUJ9。 完成