Ethereum Go Client
This is a Ethereum compatible Go Client
Status
This package is currently under active development. It is not yet stable and there are some RPC methods left to implement (some to fix) and documentation to be done.
Usage
Deploying a contract
bytecode := ... #contract bytecode
abi := ... #contract abi
var connection = web3.NewWeb3(providers.NewHTTPProvider("127.0.0.1:8545", 10, false))
contract, err := connection.Eth.NewContract(abi)
transaction := new(dto.TransactionParameters)
coinbase, err := connection.Eth.GetCoinbase()
transaction.From = coinbase
transaction.Gas = big.NewInt(4000000)
hash, err := contract.Deploy(transaction, bytecode, nil)
fmt.Println(hash)
Using contract public functions
result, err = contract.Call(transaction, "balanceOf", coinbase)
if result != nil && err == nil {
balance, _ := result.ToComplexIntResponse()
fmt.Println(balance.ToBigInt())
}
Using contract payable functions
hash, err = contract.Send(transaction, "approve", coinbase, 10)
Using RPC commands
GetBalance
balance, err := connection.Eth.GetBalance(coinbase, block.LATEST)
SendTransaction
transaction := new(dto.TransactionParameters)
transaction.From = coinbase
transaction.To = coinbase
transaction.Value = big.NewInt(10)
transaction.Gas = big.NewInt(40000)
transaction.Data = types.ComplexString("p2p transaction")
txID, err := connection.Eth.SendTransaction(transaction)
Contribute!
Before a Pull Request:
- Create at least one test for your implementation.
- Don't change the import path to your github username.
- run
go fmt
for all your changes.
- run
go test -v ./...
After a Pull Request:
- Please use the travis log if an error occurs.
In Progress =
Partially implemented =
TODO List
- web3_clientVersion
- web3_sha3
- net_version
- net_peerCount
- net_listening
- eth_syncing
- eth_coinbase
- eth_mining
- eth_hashrate
- eth_gasPrice
- eth_accounts
- eth_blockNumber
- eth_getBalance
- eth_getStorageAt (deprecated)
- eth_getTransactionCount
- eth_getBlockTransactionCountByHash
- eth_getBlockTransactionCountByNumber
- eth_getUncleCountByBlockHash
- eth_getUncleCountByBlockNumber
- eth_getCode
- eth_sign
- eth_sendTransaction
- eth_sendRawTransaction
- eth_call
- eth_estimateGas
- eth_getBlockByHash
- eth_getBlockByNumber
- eth_getTransactionByHash
- eth_getTransactionByBlockHashAndIndex
- eth_getTransactionByBlockNumberAndIndex
- eth_getTransactionReceipt
- eth_getUncleByBlockHashAndIndex
- eth_getUncleByBlockNumberAndIndex
- eth_getCompilers
- eth_compileLLL
- eth_compileSolidity (deprecated)
- eth_compileSerpent
- eth_newFilter
- eth_newBlockFilter
- eth_newPendingTransactionFilter
- eth_uninstallFilter
- eth_getFilterChanges
- eth_getFilterLogs
- eth_getLogs
- eth_getWork
- eth_submitWork
- eth_submitHashrate
- db_putString
- db_getString
- db_putHex
- db_getHex
- shh_post
- shh_version
- shh_newIdentity
- shh_hasIdentity
- shh_newGroup
- shh_addToGroup
- shh_newFilter
- shh_uninstallFilter
- shh_getFilterChanges
- shh_getMessages
- personal_listAccounts
- personal_newAccount
- personal_sendTransaction
- personal_unlockAccount
Installation
go get
go get -u github.com/xian9yu/go-web3
glide
glide get github.com/xian9yu/go-web3
Requirements
- go ^1.8.3
- golang.org/x/net
Testing
Node running in dev mode:
geth --dev --shh --ws --wsorigins="*" --rpc --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3 --mine
Full test:
go test -v ./test/...
Individual test:
go test -v test/modulename/filename.go
License
Package go-web3 is licensed under the GPLv3 License.