關(guān)于web3智能合約的個人開發(fā)總結(jié)

關(guān)于web3的介紹大家可以自己搜索相關(guān)的文章去了解狸捕,本文主要是記錄作為一個小白绘证,從0開始學習,到開發(fā)完成一個簡易的仿opensea網(wǎng)站的歷程菱鸥。

由于這次項目使用的是以太坊的鏈澎蛛,所以部分相關(guān)資料鏈接都是以太坊相關(guān)的網(wǎng)址抚垄,同時前端與區(qū)塊鏈交互使用的是metamask插件,所以前端js調(diào)用智能合約時使用的是Ethers.js

1:web3開發(fā)與以往的網(wǎng)站開發(fā)有什么區(qū)別

作為一名網(wǎng)站開發(fā)人員谋逻,我們熟知的開發(fā)內(nèi)容分為2個主要部分:由邏輯處理呆馁,數(shù)據(jù)讀寫構(gòu)成的后端,與數(shù)據(jù)展示毁兆,操作交互構(gòu)成的前端浙滤。如果接觸過前后端分離開發(fā),我們能簡單的認為荧恍,后端將邏輯處理與數(shù)據(jù)讀寫封裝起來瓷叫,只提供給前端對應(yīng)的接口。

web3與以往的這種模式相比送巡,多了一個智能合約的部分摹菠,智能合約也可以進行邏輯處理與數(shù)據(jù)讀寫,但是數(shù)據(jù)讀寫的目標由我們自己的服務(wù)器換成了在區(qū)塊鏈上骗爆。

2:關(guān)于web3的一些常識

以太坊賬戶的介紹

https://ethereum.org/zh/developers/docs/accounts/

想要與區(qū)塊鏈進行交互次氨,首先我們要有自己的賬戶,使用metamask我們可以輕松申請到一個免費賬戶摘投,賬戶的錢包地址煮寡,密鑰,助記詞需要保存好犀呼。

手續(xù)費

https://ethereum.org/zh/developers/docs/gas/

上面的有提到幸撕,世界上所有人的賬號使用的都是同一條區(qū)塊鏈,所以區(qū)塊鏈為了保證穩(wěn)定性外臂,每一次用戶與區(qū)塊鏈交互時都會收取一筆手續(xù)費坐儿。這筆手續(xù)費你愿意提供的越高,就會有更多的礦工愿意幫你更快將你這次的操作更內(nèi)容提交到鏈上宋光。

正式鏈與測試鏈

https://ethereum.org/zh/developers/docs/networks/

在開發(fā)中我們可能會經(jīng)常試錯來調(diào)試或者頻繁的測試貌矿,每一次與區(qū)塊鏈的交互都會觸發(fā)手續(xù)費的消耗,錢包內(nèi)的錢目前除了轉(zhuǎn)贈之外罪佳,或者靠當?shù)V工的獎勵一點一點積攢逛漫。使用測試鏈可以使用官方提供的水龍頭領(lǐng)取測試鏈的錢來進行各類開發(fā)的支持或測試的支持。

goerli水龍頭地址

https://goerlifaucet.com/

3:智能合約開發(fā)

智能合約介紹

https://ethereum.org/zh/developers/docs/smart-contracts/

智能合約由我們編寫好的邏輯處理赘艳,數(shù)據(jù)讀寫功能組成酌毡,發(fā)布到鏈上后克握,如果調(diào)用的合約方法涉及到數(shù)據(jù)寫入或變更,則此次調(diào)用需要用戶支付手續(xù)費阔馋,如果只是讀取合約已存的數(shù)據(jù)玛荞,則不會觸發(fā)手續(xù)費支付。合約常用的功能有eth轉(zhuǎn)贈呕寝,token構(gòu)筑勋眯,轉(zhuǎn)移等。

學習開發(fā)智能合約

本次項目開發(fā)智能合約時選擇使用的語言是solidity

solidity文檔地址

https://learnblockchain.cn/docs/solidity/

簡單的單文件合約可以直接粘貼到REMIX上檢查是否有錯誤及發(fā)布與測試

https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.7+commit.e28d00a7.js

本次項目的智能合約涉及到token構(gòu)筑下梢,轉(zhuǎn)移客蹋,以及復(fù)雜的eth轉(zhuǎn)贈金額計算,所以在了解如何使用solidity開發(fā)后孽江,選擇使用openzeppelin框架進行開發(fā)讶坯,使用框架的好處就是框架幫我們封裝了很多要用到的功能,使開發(fā)更便捷岗屏。

openzeppelin文檔地址

https://docs.openzeppelin.com/contracts/4.x/

下面為搭建一個智能合約框架的操作步驟:

新建一個項目文件夾

npm init -y

npm install --save-dev hardhat

npx hardhat

-Create a JavaScript project

npm install --save-dev @nomicfoundation/hardhat-toolbox

npm install --save-dev @openzeppelin/contracts

npm install --save-dev @openzeppelin/contracts-upgradeable

npm install --save-dev @openzeppelin/hardhat-upgrades

npm install --save-dev @nomiclabs/hardhat-ethers

npm install --save-dev @nomiclabs/hardhat-etherscan

npm install --save-dev chai

npm install --save-dev @openzeppelin/test-helpers

Vi hardhat.config.js

require("@nomiclabs/hardhat-ethers");

require("@openzeppelin/hardhat-upgrades");

require("@nomiclabs/hardhat-etherscan");

之后我們就可以在contracts目錄下創(chuàng)建自己的合約文件了辆琅,例如:Demo.sol,需要使用框架封裝的類時使用import引用就可以了这刷。

編譯

完成合約文件的編寫后婉烟,執(zhí)行npx hardhat compile進行編譯,此編譯過程會檢查代碼的基礎(chǔ)錯誤暇屋,成功后在scripts目錄下創(chuàng)建該合約對應(yīng)的Demo.deploy.js似袁,該文件可參考框架搭建時自動生成的deploy.js,替換const CONTRACT = await hre.ethers.getContractFactory("Demo");

部署

在部署前咐刨,我們還需要編輯hardhat.config.js

networks里主要設(shè)置我們要發(fā)的區(qū)塊鏈的網(wǎng)絡(luò)昙衅,如圖我是要部署到goerli測試鏈上,accounts里填寫你要發(fā)布合約的錢包私鑰定鸟,因為部署合約要收取手續(xù)費而涉,請確保該錢包有足夠的余額。url是通過alchemy注冊賬號來獲取的联予,復(fù)制HTTPS內(nèi)的KEY粘貼到url里啼县。

https://www.alchemy.com/?a=goerli_faucet

接下來的etherscan?apiKey?goerli,可以在以太坊交易所注冊賬戶創(chuàng)建一個免費的專屬KEY

由于網(wǎng)絡(luò)問題可能會導致發(fā)布失敗躯泰,所以我在此文件的后面加上了代理配置谭羔,可以根據(jù)自己代理端口進行修改华糖。

npx hardhat run scripts/Demo.deploy.js --network goerli

運行該指令即可將智能合約發(fā)布到鏈上麦向,如果失敗會有具體的報錯信息,一般要么是網(wǎng)絡(luò)問題客叉,要么是錢包余額不夠支付手續(xù)費诵竭。成功后會返回該合約在鏈上的地址信息话告。

4:合約調(diào)用

ethers.js文檔

https://learnblockchain.cn/ethers_v5/

加載ethers.js組件

<script src="https://cdn.ethers.io/lib/ethers-5.4.umd.min.js"></script>

合約發(fā)布后,我們可以通過合約的地址去交易所查看詳細內(nèi)容卵慰,例如交易記錄沙郭,token交易記錄,合約源代碼(需對此合約認證開發(fā)者)等裳朋。

在前端js調(diào)用過程中病线,我們主要要使用到合約的地址與ABI,建議將此寫到前端頁面上鲤嫡,方便直接使用送挑。以下內(nèi)容為常用的一些ethers.js的方法。

獲取當前以太幣轉(zhuǎn)美元的匯率(ethApiKey為上面自己注冊的以太坊交易所KEY)

觸發(fā)當前metamask登陸的用戶授權(quán)網(wǎng)站連接暖眼,同意即可獲得登陸者相關(guān)信息惕耕,常用于第三方登陸。

獲取指定錢包地址的余額

當前用戶調(diào)取智能合約的某個方法诫肠,不涉及金額的發(fā)送司澎。(nftContractAddress為合約地址,nftContractAbi為合約的ABI栋豫,listingId為此實例合約必要接收的參數(shù))

當前用戶調(diào)取智能合約的某個方法挤安,并包含金額的發(fā)送。(value: ethers.utils.parseEther(price.toString())此為要發(fā)送的eth的金額數(shù)笼才,catch內(nèi)的res.error.code ==='-32000'為當前用戶的金額不足支付金額及手續(xù)費時的返回狀態(tài))

本次智能合約的個人開發(fā)總結(jié)個人認為還不夠細致漱受,因為有些問題沒法記錄在此處,畢竟項目場景不一樣骡送,遇到的問題也不可能一致昂羡。我只能將大致的流程與一些需要注意的點寫下來,實際在開發(fā)中作為小白在sol文件的編寫會遇到更多的疑問摔踱,智能依靠各類搜索引擎來完善自身的代碼虐先,但一定要清楚自己的功能邏輯,確保合約沒有明顯的漏洞派敷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛹批,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子篮愉,更是在濱河造成了極大的恐慌腐芍,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件试躏,死亡現(xiàn)場離奇詭異猪勇,居然都是意外死亡,警方通過查閱死者的電腦和手機颠蕴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門泣刹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來助析,“玉大人,你說我怎么就攤上這事椅您⊥饧剑” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵掀泳,是天一觀的道長雪隧。 經(jīng)常有香客問我,道長员舵,這世上最難降的妖魔是什么膀跌? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮固灵,結(jié)果婚禮上捅伤,老公的妹妹穿的比我還像新娘。我一直安慰自己巫玻,他們只是感情好丛忆,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仍秤,像睡著了一般熄诡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诗力,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天凰浮,我揣著相機與錄音,去河邊找鬼苇本。 笑死袜茧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瓣窄。 我是一名探鬼主播笛厦,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俺夕!你這毒婦竟也來了裳凸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤劝贸,失蹤者是張志新(化名)和其女友劉穎姨谷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體映九,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡梦湘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片践叠。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嚼蚀,靈堂內(nèi)的尸體忽然破棺而出禁灼,到底是詐尸還是另有隱情,我是刑警寧澤轿曙,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布弄捕,位于F島的核電站,受9級特大地震影響导帝,放射性物質(zhì)發(fā)生泄漏守谓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一您单、第九天 我趴在偏房一處隱蔽的房頂上張望斋荞。 院中可真熱鬧,春花似錦虐秦、人聲如沸平酿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜈彼。三九已至,卻和暖如春俺驶,著一層夾襖步出監(jiān)牢的瞬間幸逆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工暮现, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留还绘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓栖袋,卻偏偏與公主長得像蚕甥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栋荸,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容