1. 什麼是Web3
中心化幫助數十億人上網,並創建了穩定、強大的基礎設施。與此同時,少數中心化實體在大片互聯網上佔有一席之地,單方面決定應該允許什麼和不應該允許什麼。
Web3 是解決這個難題的答案。Web3 不是由大型科技公司壟斷的互聯網,而是去中心化,並由其用戶構建、運營和擁有。Web3 將權力掌握在個人而非公司手中。在討論 Web3 之前,讓我們先來看看我們是如何走到這一步的。
大多數人認為互聯網是現代生活的持續支柱——它是被發明出來的,從那以後就一直存在。然而,我們大多數人今天所知道的互聯網與最初想像的完全不同。為了更好地理解這一點,將互聯網的短暫歷史分成鬆散的時期是有幫助的——web 1.0 和 web 2.0。
1989 年,在日內瓦的 CERN,Tim Berners-Lee 正忙於開發後來成為互聯網的協議。他的想法?創建開放的、分散的協議,允許從地球上的任何地方共享信息。
互聯網的第一次誕生,現在被稱為「Web 1.0」,大約發生在 1990 年到 2004 年之間。Web 1.0 上的互聯網主要是公司擁有的靜態網站,用戶之間的互動幾乎為零——個人很少生產內容——導致它被稱為只讀網路。
隨著社交媒體平台的出現,Web 2.0 時期開始於 2004 年。Web 不再是只讀的,而是演變為可讀寫的。公司不再向用戶提供內容,而是開始提供平台來共享用戶生成的內容並參與用戶與用戶的交互。隨著越來越多的人上網,少數頂級公司開始控制網路上產生的不成比例的流量和價值。Web 2.0 也催生了廣告驅動的收入模式。雖然用戶可以創建內容,但他們並不擁有它或從它的貨幣化中受益。
「Web 3.0」的前提是以太坊聯合創始人 Gavin Wood 在 2014 年以太坊推出後不久創造的。 Gavin 提出了一個解決許多早期加密貨幣採用者認為的問題的解決方案:互聯網需要太多的信任。也就是說,今天人們知道和使用的大多數互聯網都依賴於信任少數私營公司來為公眾的最大利益行事。
Web3 已成為一個包羅萬象的術語,代表了一個新的、更好的互聯網的願景。Web3 的核心是使用區塊鏈、加密貨幣和 NFT 以所有權的形式將權力交還給用戶。 2021 年 Twitter 上的一篇帖子 說得最好:Web1 是只讀的,Web2 是讀/寫的,Web3 將是讀/寫/擁有的。
盡管提供一個嚴格的定義 Web3 是什麼具有挑戰性,但有一些核心原則指導它的創建。
盡管 Web3 的殺手級功能不是孤立的,也不適合整齊的類別,但為簡單起見,我們嘗試將它們分開以使它們更易於理解。
Web3 以前所未有的方式讓您擁有數字資產的所有權。例如,假設您正在玩 web2 游戲。如果您購買游戲內物品,它會直接與您的帳戶綁定。如果游戲創建者刪除您的帳戶,您將丟失這些物品。或者,如果您停止玩游戲,您將失去投資於游戲內物品的價值。
Web3 允許通過 非同質化的代幣 (NFT) 直接擁有所有權。其他人甚至游戲的創造者,都沒有權力剝奪你的所有權。而且,如果您停止玩游戲,您可以在公開市場上出售或交易游戲內你的物品並收回它們的價值。
平台和內容創作者之間的權力動態是嚴重失衡的。
OnlyFans 是一個用戶生成的成人內容網站,擁有超過 100 萬內容創作者,其中許多人使用該平台作為他們的主要收入來源。2021 年 8 月,OnlyFans 宣布了禁止色情內容的決定。該公告在平台上的創作者中引發了憤怒,他們認為他們幫助創建了一個平台現在卻被這個平台被剝奪了收入。在強烈反對之後,這個決定很快被推翻。盡管創作者贏得了這場戰斗,但它突顯了 Web 2.0 創作者的一個問題:如果你離開一個平台,你就會失去聲譽並追隨你的人。
在 Web3 上,您的數據位於區塊鏈上。當您決定離開一個平台時,您可以將您的聲譽帶走,將其插入另一個更符合您的價值觀的介面。
Web 2.0 要求內容創建者信任平台而不是更改規則,但抵抗審查是 Web3 平台的原生特性。
傳統上,您將為您使用的每個平台創建一個帳戶。例如,您可能有一個 Twitter 帳戶、一個 YouTube 帳戶和一個 Reddit 帳戶。想要更改您的顯示名稱或個人資料圖片?您必須在每個帳戶中執行此操作。在某些情況下,您可以使用社交登錄,但這會帶來一個熟悉的問題——審查。只需單擊一下,這些平台就可以將您鎖定在整個在線生活之外。更糟糕的是,許多平台要求您信任他們的個人身份信息才能創建帳戶。
Web3 通過允許您使用以太坊地址和 ENS 配置文件控制您的數字身份來解決這些問題。使用以太坊地址可以跨平台提供安全、抵抗審查和匿名的單一登錄。
Web2 的支付基礎設施依賴於銀行和支付處理程序,不包括沒有銀行賬戶的人或碰巧住在錯誤國家境內的人。Web3 使用 ETH 等代幣在瀏覽器中直接匯款,不需要受信任的第三方。
更多關於 ETH
盡管當前形式的 Web3 有許多好處,但生態系統仍然必須解決許多限制才能使其蓬勃發展。
任何人都可以零成本使用重要的 Web3 功能,例如使用以太坊登錄。但是,交易的相對成本仍然讓許多人望而卻步。由於高昂的交易費用,Web3 不太可能在不太富裕的發展中國家使用。在以太坊上,這些挑戰正在通過 網路升級 和 第 2 層擴展解決方案來解決 。該技術已經准備就緒,但我們需要在第 2 層採用更高級別的技術,以使每個人都可以訪問 Web3。
目前使用 Web3 的技術門檻太高了。用戶必須理解安全問題、理解復雜的技術文檔並瀏覽不直觀的用戶界面。 尤其是錢包提供商 正在努力解決這個問題,但在 Web3 被大規模採用之前還需要更多的進展。
Web3 引入了新的範式,這些範式需要學習與 Web2.0 中使用的不同的心智模型。隨著 Web1.0 在 1990 年代後期越來越流行,類似的教育活動也發生了。萬維網的支持者使用一系列教育技術來教育公眾,從簡單的比喻(信息高速公路、瀏覽器、網上沖浪)到 電視廣播 。Web3 並不難,但它是不同的。讓 Web2 用戶了解這些 Web3 範式的教育計劃對其成功至關重要。
Ethereum.org 通過我們的 翻譯計劃 為 Web3 教育做出貢獻,旨在將重要的以太坊內容翻譯成盡可能多的語言。
Web3 生態系統很年輕並且發展迅速。因此,它目前主要依賴於中心化基礎設施(GitHub、Twitter、Discord 等)。許多 Web3 公司都在爭先恐後地填補這些空白,但構建高質量、可靠的基礎架構需要時間。
Web3 是一個年輕且不斷發展的生態系統。Gavin Wood 在 2014 年創造了這個詞,但其中許多想法直到最近才成為現實。僅在去年,人們對加密貨幣的興趣就大幅增加,對第 2 層擴展解決方案的改進,對新治理形式的大規模實驗以及數字身份的革命。
我們才剛剛開始使用 Web3 創建更好的互聯網,但隨著我們繼續改進支持它的基礎設施,互聯網的未來看起來一片光明。
2. 以太坊如何使用web3.js或者rpc介面獲取交易數據交易時間與確認數
如果要查詢主網上的交易記錄,可以使用etherscan。但是,如果是你自己搭建的私鏈,應該如何查詢交易記錄呢?
答案是你需要自己監聽鏈上的日誌,存到資料庫里,然後在這個資料庫中查詢。例如:
varaddr=""
varfilter=web3.eth.filter({fromBlock:0,toBlock:'latest',address:addr});
filter.get(function(err,transactions){
transactions.forEach(function(tx){
vartxInfo=web3.eth.getTransaction(tx.transactionHash);
//這時可以將交易信息txInfo存入資料庫
});
});
web3.eth.filter()用來監聽鏈上的日誌,web3.eth.getTransaction()用來提取指定交易的信息,一旦獲得交易信息,就可以存入資料庫供查詢用了。
推薦一個實戰入門,你可以看看:以太坊教程
3. 「官方」搭建Web3:Filecoin與以太坊攜手共進
這是Protocol Labs創始人Juan Benet在EthCC 2021上的演講概要,查看完整內容:
https://www.bilibili.com/video/BV1eb4y1r7E1
Filecoin網路是面向生態的,它與Protocol Labs搭建模塊化解決方案的傾向是一致的。因為它本來就是設計給其他人使用,所以Filecoin在Web3領域的其他棧、應用和生態里如魚得水。自從其在2020年10月的啟動開始,Filecoin已經增長到超過8 exbibytes的可用存儲空間,有超過400個項目進入了這個生態。以太坊就是一個能持續證明其可協作性和共同利益的生態系統。
Filecoin + 以太坊
>>>>Filecoin和以太坊虛擬機(EVM)
Filecoin生態意識到網路支持智能合約的好處。最初,開發者社區相信架設在以太坊和Filecoin之間的橋服務足夠在Filecoin上支持智能合約了。不過,通過橋來使用智能合約是很笨重的方式,相比於直接在以太坊實現智能合約的功能和可組合性更是不足。有一個提議是在Filecoin上加入以太坊虛擬機(EVM),從而在存儲層啟用對智能合約的支持,以及為這兩個生態的結合提供更多機會。
>>>>開發者工具和資源
Fleek:讓用戶能為去中心化網路架設網站、存儲和分發文件及開發dapp。Fleek可以讓每一個人(從專業的開發者到日常的互聯網用戶)更容易以去中心化的方式創建app和存儲文件,從而加速去中心化網路的採用率。Fleek可以在Filecoin上進行自動化存檔,並通過ENS(以太坊域名服務)這樣的應用來利用以太坊的生態系統。
https://fleek.co/
Web3.Storage:是一個讓開發者在Filecoin去中心化存儲網路上存取數據的簡單介面。Web3.Storage為開發者(包括以太坊dapp開發者)提供了搭建應用的簡單方式,這些應用可以帶有冗餘的去中心化的存儲以及安全的內容定址數據。
http://web3.storage/
PowerLoom:以去中心化的方式將鏈上和鏈下數據聚合起來以生成帶有密碼學證明的快照。它旨在通過一個豐富的節點和利益相關者生態系統(他們被激勵參與到協議里)來搭建信任,並按需提供洞見。PowerLoom特別適用於以太坊DeFi這樣的生態,這類系統是非常復雜的,而且需要基於驗證的信任。
https://powerloom.io/
>>>>DeFi應用
SecuredFinance(https://secured-finance.com/)是一個綜合平台,整合了基於智能合約的點對點固定利率貸款、抵押品管理服務、貨幣間交易和其他類型的利率產品。Secured Finance的協議是去中心化的點對點金融協議,提供了由以太坊智能合約賦能的區塊鏈上的中後台銀行業務。Secured Finance可以滿足Filecoin網路內的需求,它提供的解決方案能夠滿足Filecoin存儲提供者對FIL貸款的強烈需求。
>>>>數據市場
OceanProtocol(https://t.co/misApE3ggc?amp=1)是一個在Filecoin上搭建的數據市場。Ocean的數據token(data tokens)是以太坊ERC-20 token,可以輕易地用於發布和消費數據服務。如果你有1個數據token,你可以訪問一個特定的數據服務。Ocean market是一個專門為數據服務的去中心化交易所,它分叉了一個Balancer AMM(自動化做市商)來降低gas成本。在這個市場中,用戶可以對數據進行發布、購買、銷售、消費和stake操作。
通過Filecoin,用戶可以利用Ocean來發起自己的Filecoin數據市場,或創建一個Filecoin dataDAO或指數基金。通過Ocean Protocol的工具和Filecoin的去中心化存儲資料庫,我們正見證新生的開放數據經濟。
>>>>視頻應用
LivePeer:是一個去中心化的在線視頻流媒體基礎設施,由以太坊區塊鏈確保安全性。將Filecoin和IPFS結合提供存儲和內容分發功能後,去中心化視頻應用就成為可能了。
https://livepeer.org/
Voodfy:正為私有的視頻架設服務提供去中心化工具。這是一個多功能的安全流媒體解決方案,讓用戶能完全控制自己的內容,這包括了訪問權的設定以及變現的方式。它利用了Livepeer、Ethereum、Textile Powergate和Filecoin.
https://voodfy.com/
VideoCoin:正搭建一個能可靠地創建、存儲和交易基於視頻的NFT解決方案,它可以繞過在以太坊上存儲實際內容時固有的復雜性和費用。VideoCoin正將其去中心化視頻處理網路與Filecoin整合起來,以搭建首個專門為創建和交易視頻NFT服務的平台。這個平台是新生的全球數字收藏品市場急需的一部分。
https://videocoin.io/
>>>>NFT
nft.storage(http://nft.storage/)是一個由Protocol Labs實驗室和Pinata支持的服務,它專門為存儲NFT數據而設計。
nft.storage讓開發者通過內容定址和去中心化存儲來保護其NFT資產和相關的元數據,確保所有的NFT遵循最佳實踐以實現長期的可訪問性。
未來的使用場景
隨著Filecoin和Ethereum生態系統的成長和重疊,會出現更多的新生用例和開發者機會。一些可以進行創新的用例包括:
>>>>可組合的DeFIL
將存儲和Defi的世界結合可以產生一些機會。人們可以將市場訂單(如要價、出價和交易)帶到一個去中心化交易所上,以觀察市場是如何評判這些訂單的價值的。通過這樣的能力,生態系統可以開始想像硬體期貨(hardware futures)和時空期貨(spacetime futures)等的出現。
>>>>數據豐富的NFT
NFT將會越來越復雜,而Web3社區需要 探索 採用數據豐富(data-rich)的NFT的方式。VideoCoin已經將其視頻處理引擎與Filecoin連接起來,以結合以太坊對NFT的支持能力及Filecoin的存儲能力。像VideoCoin這樣的工具可以用來創建一類新型的NFT,如短電影、視頻片段和完整長度的專題特寫。
>>>>按觀看次數支付的媒體
通過在Filecoin上存儲的信息,我們可以利用以太坊的token支持能力去創建由token保護的頁面和媒體(文章、電影和音樂等)。我們可以復制Web2時代的按觀看次數支付模式,而無需復制數據和廣告模型。
這只是一個開始!Filecoin和以太坊生態有長期的協作 歷史 和機會,未來可期。
4. 使用Web3J與第三方合約交互——批量轉賬
之前使用NodeJs與智能合約交互,都是訪問的自己部署的合約。最近要對線上第三方合約進行轉賬操作,人數比較多,一筆筆操作起來手指都點斷了還容易出錯。既然代幣Token都遵守ERC20協議,肯定有統一的Transfer(轉賬)方法供客戶端調用,那麼編寫程序實現自動轉賬應該可以實現,去查了相關資料發現web3j是不錯的選擇。
輕量級客戶端與以太坊交互的Java庫。
既然是調用第三方合約那麼肯定需要知道合約地址,合約地址定義了到哪裡去訪問合約;
ABI(Application Binary Interface): 應用程序二進制介面,定義了智能合約提供的方法功能
若是無法獲取到ABI介面,也可以使用solc編譯生產bin和abi文件。
(生產代理類時可以指定包路徑和類名)
這樣一來,便可以使用程序完成批量轉賬操作。
後來研究發現,使用NodeJs直接調用Web3也可以實現對應功能,不過還是對Java更熟悉一些,就採用了Java的方式。
5. 【ETH錢包開發04】web3j轉賬ERC-20 Token
在上一篇文章中講解了ETH轉賬,這一篇講一下ERC-20 Token轉賬。
【ETH錢包開發03】web3j轉賬ETH
1、直接用web3j的API
2、java/Android調用合約的 transfer 方法
不管用哪種方式來轉賬,你都需要先寫一個solidity智能合約文件來創建ERC-20 Token,然後部署合約,最後才是通過客戶端來調用。
注意:erc-20 token轉賬和eth轉賬的區別如下:
1、erc-20 token創建交易對象用的是這個方法 createTransaction
2、erc-20 token需要構建 Function ,它其實對應的就是erc-20 token合約中的那些方法。它的第一個參數就是ERC20中那幾個方法的名稱,第二個參數的話就是對應合約方法中的參數,第三個參數是和第二個參數對應的,按照我那樣就行了。轉賬的話就是 transfer ,我們從合約的 transfer 可以看到第一個參數是收款地址,第二個參數是金額,所以 Function 這里對應起來就好。
這種方法不需要使用web3j封裝的方法,而是直接調用solidity合約的方法。
步驟
1、web3j載入一個已經部署的合約
2、驗證合約是否載入成功 isValid
3、如何載入合約成功,則調用合約的 transfer 方法
注意:
1、這里的 TokenERC20 是根據solidity智能合約生成的對應的Java類,用於java/Android和智能合約交互的,如果你對這里不太清楚,不妨看看我之前的一篇文章。
以太坊Web3j命令行生成Java版本的智能合約
2、如果載入合約失敗,可能的一個原因是合約對應的Java類中的 BINARY 的值不對,這個值是你部署合約成功之後的bytecode,你最好檢查對比一下。
我發送一筆交易,可以通過這個地址查詢
https://rinkeby.etherscan.io/tx/
6. 以太坊web3.sendRawTransaction離線簽名交易
工作中需要復現短地址攻擊和the重入攻擊,重入攻擊可以直接通過eth.sendTransaction和remix來發送交易,但是短地址攻擊由於錢包和remix這些都對input做了長度檢測,無法通過這些方式來復現,只能通過發離線簽名交易來實現。
1.環境依賴:nodejs , keythereum , ethereumjs-common , ethereumjs-tx 。
2.進入Node控制台,獲取相應賬戶私鑰。
3.簽名交易,進入Node,這里注意nonce問題,需要Nonce是實際可執行的nonce,Nonce不對會發送交易失敗,關於如何獲取input data網路比較多就不詳述了。
4.遇到的坑,網路出來的步驟是有問題的或者過時了,當時是參考的這篇文章, https://www.freebuf.com/articles/blockchain-articles/199903.html
,在控制台通過eth.sendRawTransaction發送簽名好的交易,我遇到了這個錯誤 ** sendRawTransaction invalid sender **
7. 以太坊入門(三)用web3j進行以太轉賬及代幣轉賬
上章講到賬戶的查詢,本章講述賬戶轉賬。
代幣轉賬和以太轉賬的區別在於,to地址是合約地址,而input是有三部分數據構成:transfer方法的哈希+收款人的地址+轉賬金額。此處比較難理解的正是Function部分,設置好參數以後,調用rawTransaction就可以了。
8. 以太坊錢包轉賬實戰記錄
最近項目中,要求給客戶退款。 雖然之前我們寫的服務封裝了以太坊錢包轉賬的諸多細節,可以很方便的轉賬,但考慮再三,覺得最安全的方式還是用錢包本身的命令來轉賬。話不多說,這里記錄下用以太坊錢包轉賬的步驟:
1. 首先網路搜索了下,網上此類的文章還不少。看了一圈後,覺得最好的還是這篇: https://blog.csdn.net/DDFFR/article/details/53673650 geth賬戶管理轉賬。
2.開始打開自己的以太坊錢包。查看錢包各個賬戶的余額。命令:eth.getBalance('0xaddress')
3. 開始轉賬步驟:
3.1) 解鎖賬戶。命令:personal.unlockAccount("0xaddress123456789",「123456」)。 第一個參數:賬戶,第二個參數:解鎖密碼。就是創建這個賬戶地址時的密碼。 其實還有第三個參數,是時間,表示解鎖多久。如60,就寫0x3c。可以不寫,默認是300秒,就是5分鍾;
3.2)計算fee:因為想把賬戶里的錢都退回去,所以要計算一個合理的fee,fee的計算公式:
fee <= gasPrice * gasLimit,對於普通的ETH交易,則gasLimit=21000即可,這個值可看區塊瀏覽器的交易,一般都是這個值。而gasPrice則需要自己確定,這個是浮動的。獲取方式:通過錢包的:
eth.gasPrice 來獲取錢包本身推薦的礦工費。也可自己給一個值。但記住,給太低就沒人打包了;
而對於gasLimit,錢包的值各不相同。如果不在乎手續費的話,可以用後面提到了的轉賬命令,給自己的賬戶發送一個0eth的轉賬,來獲取本錢包的gaslimit參數。
3.3)計算實際款額度:
amout = 賬戶的余額-fee
3.4)轉賬命令:
有幾個方式:
gasprice/gaslimit由錢包本身指定: eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(1, "ether")})
eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', value: web3.toWei(0, "ether")})//通過這個可以獲取錢包本身提供的 gasLimit默認參數。
自己指定gasprice/gaslimit:eth.sendTransaction({from: '0xfromaddress', to: '0xtoaddress', gasPrice: web3.toWei(30, 'gwei'), gas:21000, value: web3.toWei(1, "ether")})
這里用到了web3.toWei()函數,這個函數表示將第一個數字參數變成最小以太坊單位Wei表示的一個數字。第二個參數表示這個參數的單位。可以是1Gwei = 10^9 Wei,1 ether=10^18 Wei.
如果出現錯誤,根據提示修改參數。如果成功,則返回一個交易id。根據這個id到瀏覽器上查看交易狀態即可。
上面步驟要在解鎖時間范圍內完成,要不就提示賬戶被鎖定的信息。感覺以太坊這點做得還是挺好,挺安全的。
在做上面步驟時,這里還遇到了一個坑,就是有個服務會掃描錢包賬戶,進行資金歸集。對此,為了操作不被打斷。必須先停止對這個錢包操作的所有服務,否則會中斷轉賬流程,引起不必要的安全隱患。所以切記:轉賬前,保證只有你自己在操作錢包;轉賬前,保證只有你自己在操作錢包;轉賬前,保證只有你自己在操作錢包;