free your mind be Happy then do a good job ! 「讓硬體開口說話,讓軟體腳步前行,讓Robot聽你的指令奔馳!」
welcom ! Handel home
2023年2月20日 星期一
2022年9月15日 星期四
web3.js function 介紹
#Web3 Get Node
判斷目前使用者所連接是那種型態的Ethereum節點,Testrpc、Geth或Metamsak…等。
web3.version.getNode(function(error, result){
if(error){
// error handle
} else {
// do something
};
});
#Web3 Syncing
判斷使用者所連接的Ethereum節點是否正在做同步的動作。正在同步為True,否則為False。
web3.eth.getSyncing(function(error, result) {
if(error) {
// error handle
} else {
// do something
}
});
#Web3 Coinbase
查看連接Ethereum節點的coinbase address。coinbase是專門存放挖礦所獲得獎勵的read only帳戶。
在Geth Node環境下可以使用Geth console下指令web3.miner.setEtherbase()去修改coinbase address。
web3.eth.getCoinbase(function(error, result) {
if(error) {
// error handle
} else {
// do something
}
});
#Web3 Default Account
查看目前連接Ethereum節點的deault account address。deault account是read/write only。
當我們在進行某些操作例如sendTransaction時,若沒有特別指定要從哪一個帳戶發出,
則默認就是使用deault account。因為每個Ethereum節點實作的方式不同,default account不一定有定義,使用前最好檢查一下。
web3.eth.defaultAccount// 為了避免default account undefined的話, 可以改寫成下面的Code
var defaultAccount = web3.eth.defaultAccount;
if(!defaultAccount) {
web3.eth.defaultAccount = web3.eth.accounts[0];
defaultAccont = web3.eth.accounts[0];
}
#Web3 Get Balance
取得帳戶裡的餘額。分成同步和非同步兩種。
使用web3.eth.getBalance()所獲得餘額的單位是Wei。
web3.fromWei()就是把Wei轉成其他單位,下面範例則是轉成Ether。
toFixed()是我們只取到小數點後兩位數。
getBalance()的第二個參數可以指定要從那個Block讀取資料。
web3.eth.defaultBlock默認是latest,意思就是從最新的Block讀取該帳戶的餘額。
/* Get Balance Sync */
var balance = web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]), 'ether').toFixed(2);/* Get Balance Async */
web3.eth.getBalance(web3.eth.accounts[0],web3.eth.defaultBlock,function(error,result){
if(error){
// error handle
} esle {
var balance = web3.fromWei(result,'ether').toFixed(2);
}
});
#Web3 Lock/Unlock Account
上鎖和解鎖帳戶。
對於某些特定的操作必須先把帳戶先unlock才能進行,例如sendTransaction()相關操作。
web3.personal.unlockAccount()的第三個參數duration可以設定要解鎖多久。
若使用者連接的Etherum節點是Testrpc或Metamask,可以不須作lock/unlock動作。
若是在Geth環境下,則在sentd transaction前必須先unlock帳戶。
/* Lock Account */
web3.personal.lockAccount(account, passwd, function(error, result){
if(error) {
// error handle
} else {
// do something
}
});
/* Unlock Account */
web3.personal.unlockAccount(account, passwd, duration,function(error, result){
if(error) {
// error handle
} else {
// do something
}
});
#Web3 Send Transaction
傳送交易。
web3.eth.sendTransaction()的第一個參數txnObject是一個JSON format的物件。
txnObject可以指定這次transaction的資訊。
=>from是指從哪個帳戶送出,若無指定默認是default account。
=>to是送到那個帳戶。
=>value則是要傳送的金額。
其他還有像是gas、 gasPrice、data、nonce…等參數可以指定。
傳送完後可以得到transaction hash,使用web3.eth.getTransactionReceipt(hash)去查詢transaction的狀態。
var txnObject = {
"from": fromAccount,
"to": toAccount,
"value": web3.toWei(1, 'ether'),
// "gas": 21000, // (optional)
// "gasPrice": 4500000, // (optional)
// "data": 'For testing', // (optional)
// "nonce": 10 // (optional)
};
web3.eth.sendTransaction(txnObject, function(error, result){
if(error) {
// error handle
} else {
var txn_hash = result; //Get transaction hash
}
});
#Web3 Deploy Contract
Deploy contract有兩種方式,
一種是使用Web3.js contract的new(),另一種是使用sendTransaction()的方式。
這裡只列出contract new()的方式,sendTransaction()方式可以從Web3ApIScript的範例中看到。
在deploy contract之前我們需要先complie contract的sol檔來獲得abi和bytecode。
利用abiDefinition建立contractInstance並將bytecode放入data欄位中。constructor_param則是contract 初始化所使用的參數。
使用contract new()來進行佈署。執行完new()之後,callback function一共會被呼叫兩次。
第一次回傳transaction hash,第二次則是contract address。
var contractInstance = web3.eth.contract(abi);
var params = {
from: fromAccount,
data: bytecode,
gas: gas
};
var constructor_param = 10;
//contract init
paramcontractInstance.new(constructor_param, params, function(error, result){
if(error) {
// error handle
} else {
if(result.address){
var contractAddress = result.address;
} else {
var txhash = result.transactionHash;
}
}
});
Web3 Interact Contract
與smart contract互動的方式主要分成,取得contract資料的call和改變contract資料的send。
使用call只是單純取得contarct資料,並不會改變contract的狀態,所以不會花費任何費用。
呼叫call()時要有contract abi和contract address。contract.METHOD.call()的METHOD是放contract中所定義的function名稱,以下面的例子就是getNum。
var contract = web3.eth.contract(abi);
var contractInstance = contract.at(address);
/* contractInstance.METHOD.call, METHOD=getNum is the function of contract*/
contractInstance.getNum.call(function(error, result) {
if (error) {
// error handle
} else {
// result is string
// do something
}
});
若想要改變contract中的資料就必須使用send。這裡的send指的是send transaction。
因為會改變contract中的資料,需要繳交手續費給礦工幫忙把資料紀錄在block中。
改變的資料一樣會存放在block中,等同於發起了一筆transaction。使用contract.METHOD.sendTransaction()來改變contract資料。
回傳該transaction的hash。METHOD一樣是指contract所定義的function名稱,下面例子就是setNum。parameterValue則是要賦予contract的新值。
var contract = web3.eth.contract(abi);
var contractInstance = contract.at(address);
var txnObject = {
from: fromAccount,
gas: estimatedGas
};// contractInstance.METHOD.sendTransaction, METHOD=setNum is the function of contract
var parameterValue = 5 ;
contractInstance.setNum.sendTransaction(parameterValue, txnObject,function(error, result){
if(error){
// error handle
} else {
// do something
}
});
以太坊生態系統 Ecosystem Resources(生態資源)
學習和理解以太坊生態系統的可用DApps,服務,寫作和知識庫的指南,
專注於生態系統發展
Wallets(錢包)
• Metamask-支援ERC Token的Chrome擴充套件以太幣錢包
• Gnosis multisig wallet-經過稽核的多重簽名錢包
• Mist-瀏覽並使用以太坊網路上的DApps
• Exodus-帶有Shapeshift整合的桌面錢包
Web Wallets
• MyEtherWallet-開源工具,可輕鬆安全地與區塊鏈進行互動
• Ether Address Lookup-用於網路釣魚防護和Eth地址突出顯示的Chrome擴充套件程式
• MyCrypto-用於生成以太錢包,處理ERC-20Token以及更輕鬆地與區塊鏈互動的開源客戶端工具
• Portis-基於網路的錢包,方便使用者登入DApp
• Eth lightwallet–節點和瀏覽器的輕量級JavaScript錢包
• SpankCard-瀏覽器中的以太坊錢包,支援付款渠道
• Mnemonic generator–生成單詞助記符和關聯的公鑰/私鑰對。選擇“以太坊”作為數字貨幣以生成以太坊地址。適用於truffle-hd-wallet。
Mobile Wallets(手機錢包)
• Toshi-移動DApp瀏覽器和錢包
• Cypher– 移動DApp瀏覽器
• Trust– 適用於ERC Tokens的移動錢包
• Status-適用於以太坊的免費開源移動作業系統
• imToken-功能豐富的數字資產移動錢包,支援多鏈資產管理,DApp瀏覽和安全,私密的價值交換
• Jaxx-手機和桌面錢包,集成了Shapeshift支援
• WallETH-原生Android以太坊錢包
• eth-wallet-light–為移動裝置最佳化的輕量級JavaScript錢包
Hardware Wallets(硬體錢包)
• Trezor-原裝硬體錢包
• Ledger-支援多種加密貨幣和Token
• KeepKey-簡單的硬體錢包
Gas price calculators and tools(Gas價格計算器與工具)
• EthGasStation-估算tx價格與時間的網站
• Petrometer-彙總從指定的以太坊地址傳送的所有交易的每日和總Gas消耗量
• CryptoProf-用於智慧合約的Gas分析器
Services(服務)
• Oracalize-適用於智慧合約的Oracle服務
• Infura– API閘道器,你無需託管自己的ETH節點
• Quiknode-用於啟動個人Parity / Geth節點的服務
• Regis-數字資產註冊管理機構
• Viant-如果用例是面向業務流程,請考慮使用Viant作為後端
• uPort-全部身份解決方案
• Ether Address Lookup-用於網路釣魚防護和Eth地址突出顯示的Chrome擴充套件程式
• Netstats-以太坊網路統計
• ENS– ENS提供了一種安全且分散的方式,使用簡單,易讀的名稱來處理區塊鏈內外的資源
• Name Bazaar-透過以太坊名稱服務註冊的名稱交換的點對點市場
• Quantstamp-一項服務,提供收費的自動和手動智慧合同安全稽核
• SmartCheck-針對安全漏洞和最佳實踐的Solidity原始碼的靜態分析
• MD4 Online Hash Function-使用各種雜湊演算法選項雜湊輸入的工具
• iExec SDK-使智慧合約能夠在鏈外執行功能或應用程式。支援作為Docker映象提供的任何遺留應用程式。
Knowledge/Education(知識/教育)
• Awesome Buggy ERC20 Tokens-受影響的ERC20智慧契約中的漏洞集合
• Solidity idiosyncrasies– Solidity陷阱、限制和特質
• Ethereum development with Go–基於Go語言的以太坊開發書籍
• Consensys Academy– 課程
• B9Lab– 付費課程
• Blockgeeks-關於Solidity/ dapp開發的付費課程。
• Chainshot building blocks-免費的基於專案的課程和挑戰
• Delegate call-問答網站
• Stackexchange-問答網站
• r/EthDev– reddit分模組
• Ethernaut– Web3 / 基於戰爭遊戲的Solidity
• Reducing Gas Fees-減少交易Gas的提示和技巧
• Dapp University-免費影片教程
• Attacks on Smart Contracts
• Zastrin-關於Solidity / Dapp Development的付費課程。
Security best practices(安全最佳實踐)
• Smart contract best practices– 由 ConsenSys製作
• Safety wiki-以太坊基金會安全維基
Solidity Games!(Solidity遊戲)
• OpenZeppelin Ethernaut
• Cryptozombies-世界上最好的不死教程
• Capture the Ether
Scaling(擴充套件)
• Comprehensive Medium article關於以太坊的各種解決方案
Reference(參考)
• Wiki-覆蓋與以太坊相關的所有事物的以太坊維基
• Yellow Paper-以太坊的正式規範
• Beige Paper-用non-yellow-paper syntax語法重寫黃皮書
• EthOn-本體論是域內概念和關係的形式化,EthOn是用RDF和OWL編寫的
• Mastering Ethereum–由Andreas M. Antonopoulos,Gavin Wood和其他許多人編寫
• EVM opcodes-以太坊操作碼和指令參考
• EVM illustrated-這是關於以太坊虛擬機器的插圖文件
• 4bytes-常用智慧合約功能的4位元組識別符號列表功能簽名
• Solidity cheat sheet– Solidity語法的快速概述
Governance(監管)
• Ethresear.ch-參與以太坊研究工作的半公共論壇,包括但不限於:Casper,Sharding,EVM改進,Crytpeconomics,Plasma和State-channels
• Fellowship of Ethereum Magicians-該討論區促進整個以太坊社群內個人之間的有意義的溝通
• EIPs-以太坊改進提案庫
Block explorers(區塊瀏覽器)
• Etherscan-檢視Eth交易和合約程式碼的主流方式
• POA Explorer-開源以太坊區塊瀏覽器,由Ethprize資助,由POA開發
• QuickBlocks– QuickBlocks是一組軟體庫,應用程式,工具和示例,允許您檢索以太坊區塊鏈資料。更快、具有更高的資訊內容、以完全分散的方式、以完全自動化的方式和高度免維護
• Etherchain lite-輕量級私人以太坊鏈瀏覽器
• Alethio EthStats 2.0即將到來
• Supermax-以太坊上智慧合約的活動和事件日誌的實時資料饋送
Decentralized Exchanges(去中心化交易所)
• Airswap
• Radar relay
• ERC Dex
• DDEX
• Ethfinex
• Shark Relay
• LedgerDex
• Bamboo Relay
• Instex
• Starbit
• Opensea.io
• Bancor
• Kyber
• Gnosis Dutch Exchange
Incentivisation / Monetisation Tools(激勵/貨幣化工具)
• Gitcoin-為開源提供資金或尋找開源工作的賞金網路
• CodeFund– Ethical Advertising Platform for Open Source
Awesome lists(其他範例)
• Awesome Cryptoeconomics-密碼經濟研究和學習材料的管理列表
• Awesome Solidity-一個很棒的實體資源列表,庫,工具等等
• Awesome EVM– 以太坊虛擬機器列表
• Awesome State-Channels-在以太坊上有關狀態通道的資源管理列表.
• DEX protocols–去中心化交易的協議列表
• Ethereum Token Standards– 以太坊Token標準的詳盡列表
原來小白要成為技術大咖,要學這麼多,註定又是一個接一個的學習型週末!
如果大家也有學習資源,歡迎大家掃碼進群,一起分享,共同進步!
小編提醒大家,一定記得點贊、收藏、留言和轉發哈
原文連結:
https://github.com/ConsenSys/ethereum-developer-tools-list/blob/master/Tools.md
https://github.com/ConsenSys/ethereum-developer-tools-list/blob/master/EcosystemResources.md
以太坊開發者工具列表
# Solidity-最流行的智慧合約語言
# Truffle-最流行的智慧合約開發、測試和部署框架。
# MetaMask– 可與以太坊Dapps互動的Chrome擴充套件程式錢包。
# Truffle boxes-以太坊生態系統的打包元件
Developing Smart Contracts(智慧合約開發)
Smart Contract Languages(智慧合約語言)
• Solidity– 以太坊智慧合約語言
• Bamboo– 一種靈活的智慧合約語言
• Vyper– 新的實驗程式語言
• LLL-低級別的Lisp語言
Frameworks(開發框架)
• Truffle-最流行的智慧合約開發,測試和部署框架,包括Truffle、Ganache和Drizzle。
• Embark– DApp開發框架
• Dapp– DApp開發框架,DApple的繼任者
• Populus–擁有可愛動物圖片的以太坊開發框架
• Etherlime-基於ethers.js的Dapp部署框架
• Cliquebait-透過docker例項簡化智慧合約應用程式的整合和測試,它與真正的區塊鏈網路非常相似
IDEs(整合開發環境):
用於提供程式開發環境的應用程式,一般包括程式碼編輯器、編譯器、除錯器和圖形使用者介面等工具
• Remix– Web IDE內建靜態分析,測試區塊鏈VM
• Atom– Atom Solidity Linter和Etheratom的原子編輯器
• Pragma– 非常簡單的solidity Web IDE,自動生成的智慧合約介面。 autocomplete-solidity和language-solidity包
• Superblocks Studio-編寫,構建和部署智慧合約
• Vim solidity– solidity的Vim語法檔案
• Visual Studio Code– Visual Studio Code擴充套件中增加了對Solidity的支援
• Intellij Solidity Plugin-適用於JetBrains IntelliJ Idea IDE(免費/商業)的開源外掛,具有語法高亮,格式化,程式碼完成等功能。
• YAKINDU Solidity Tools-基於Eclipse的IDE,具有文字敏感特性,比如程式碼完成和幫助、程式碼導航、語法著色、內建編譯器、快速修復和模板。
• Eth Fiddle-由Loom網路開發的IDE,允許開發者編寫、編譯和除錯智慧契約,便於共享和查詢程式碼片段。
Test blockchain networks(區塊鏈網路測試)
• Ganache-用於測試以太坊區塊鏈的應用程式,具有可視UI和日誌
• Kaleido-使用Kaleido打造區塊鏈聯盟網路,非常適合PoC和測試
• Local Raiden-在docker容器中執行本地Raiden網路以進行演示和測試
• Private networks deployment scripts-私有PoA網路的開箱即用部署指令碼
• Local Ethereum Network-私有PoW網路的開箱即用部署指令碼
Test Ether faucets(測試乙太網水龍頭)
• Rinkeby faucet
• Kovan faucet
• Ropsten faucet
Truffle 工具說明
Truffle套件是一個開發乙太坊(Ethereum)區塊鏈DApp(分散式應用程式)的開發環境,是開發DApp的一站式解決方案,
功能包括:
編譯合約、
部署合約、
開發DApp前端、
測試DApp等。
Truffle套件主要有3個模組:
Truffle 太坊(Ethereum)區塊鏈DApp開發環境。
Ganache Ganache可以創建本地區塊鏈網路,用於測試智合約,你可以在本地區塊鏈網路上部署合約、開發應用程式、運行測試和執行其他任務,不需要付任何費用。
Drizzle 前端庫的集合,使編寫dapp使用者介面更容易。
Truffle
Ethereum spec
內置智慧合約編譯、連結、部署和二進位管理功能。
用於快速開發的自動化合約測試功能。
腳本化、可擴展的合約部署和遷移框架。
強大的網路管理功能,可以部署到任意數量的公共和私有網路。
使用EthPM和NPM進行包管理,使用ERC190標準。
互動式控制台工具可以直接與合約通信。
可配置的構建管道,支援緊密集成。
強大的外部腳本運行器功能,支援在Truffle環境中執行外部腳本。
>>Truffle 安裝說明
安裝 Node 與 NPM
Truffle 框架依賴Node,需要使用npm安裝。
首先需要安裝node,npm會同時安裝,下載node,按提示安裝。
安裝完後,可以驗證一下node版本:
$ node -v
安裝 Truffle
使用npm安裝Truffle框架:
$ npm install -g truffle
驗證truffle安裝:
$ truffle
--version
Truffle v5.0.35 - a development framework for
Ethereum
...
>>Truffle 創建智能合約專案
可以使用truffle init命令可以創建原始的專案範本,但是對於初學者,使用Truffle
Box可能更簡單,
Truffle Box中包含了很多示例應用程式和專案範本。我們將使用MetaCoin
box,它將創建一個通證,可以在帳戶之間傳輸:
1. 創建專案目錄:
$mkdir MetaCoin
$cd MetaCoin
2. 下載(“unbox”) MetaCoin box 專案範本:
$truffle unbox metacoin
注意: 你可以使用truffle unbox命令下載任何其他 truffle box。
注意: 要創建一個不包含智慧合約的原始Truffle項目,可使用Truffle init。
注意: 你可以使用一個可選的--force參數來初始化目前的目錄中的專案,而不管它的狀態如何(例如,即使它包含其他檔或目錄),
這適用於init和unbox命令。注意,這可能會覆蓋目錄中的檔。
Kevin@QIKEGU g:\qikegu\ethereum\MetaCoin
> tree /f
專案路徑列表
G:.
│ LICENSE
│ truffle-config.js
│
├─contracts
│ .placeholder
│ ConvertLib.sol
│ MetaCoin.sol
│ Migrations.sol
│
├─migrations
│ 1_initial_migration.js
│ 2_deploy_contracts.js
│
└─test
.placeholder
metacoin.js
TestMetaCoin.sol
contracts 目錄 智慧合約原始檔案目錄。
migrations 目錄 遷移檔目錄,遷移檔都是javascript腳本,幫助我們把智慧合約部署到乙太坊。
test 目錄 測試代碼目錄。
truffle-config.js 檔 Truffle專案設定檔,例如,可以在裡面配置網路。
>>Truffle –編譯合約
目標文件
所有的合約原始檔案都位於專案的contracts/目錄中。由於合約是用Solidity語言編寫的,所以合約原始檔案的副檔名都是.sol。
相關的Solidity庫檔的副檔名也是.sol。
如果是原始的Truffle專案範本(通過truffle
init創建),裡面將包含一個Migrations.sol原始檔案,用於部署合約。
如果使用 Truffle
Box,裡面將包含多個檔。
$truffle compile xxx <== 編譯指定合約
$truffle compile all
<== 全部編譯
編譯構件(artifact)
編譯的構件將放在專案根目錄下的build/contract/目錄中, 如果此目錄不存在,則創建該目錄。
這些構件是Truffle內部工作不可或缺的,它們在應用程式的成功部署中扮演著重要的角色。你不應該編輯這些檔,在編譯和部署合約時,它們將被覆蓋。
依賴項
可以使用Solidity語言的import命令聲明合約依賴項。Truffle將按照正確的順序編譯,並確保所有依賴項都被編譯。依賴關係可以通過2種方式指定:
通過檔案名導入依賴項
要從其他檔導入合約,可以將以下代碼添加到Solidity原始檔案中:
import "./AnotherContract.sol";
這將導入另一個原始檔案AnotherContract.sol中的所有合約,導入檔的路徑是基於當前原始檔案的相對路徑。
注意,Solidity語言還允許其他導入語法。有關更多資訊,請參閱Solidity文檔。
從外部包導入合約
Truffle支持通過 EthPM 和 NPM 安裝依賴項。要從依賴項導入合約,可使用以下語法
import "somepackage/SomeContract.sol";
這裡,somepackage表示通過EthPM或NPM安裝的包。SomeContract.sol表示該包提供的Solidity原始檔案。
注意,在搜索NPM安裝的包之前,Truffle將首先搜索EthPM安裝的包,因此在命名衝突的罕見情況下,將使用EthPM安裝的包。
有關如何使用Truffle包管理特性的更多資訊,請參閱Truffle EthPM和NPM文檔。