Ethereum Go Client
This is a Ethereum compatible Go Client
which implements the
Eth JSON RPC Module,
Personal JSON RPC Module and
NET JSON RPC Module.
Status
This package is currently under active development. It is not already stable and the infrastructure is not complete and there are still several RPCs left to implement.
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!
In Progress = 
Partially implemented = 
TODO List
- web3_clientVersion
- web3_sha3
- net_version
- net_peerCount
- net_listening
- eth_protocolVersion
- 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/goodstemy/w3
glide
glide get github.com/goodstemy/w3
Requirements
- go ^1.8.3
- golang.org/x/net
Testing
Node running in dev mode:
geth --dev --ws --wsorigins="*" --rpc --rpcapi eth,web3,personal,ssh,net --mine
Full test:
go test -v test/modulename/*.go
Individual test:
go test -v test/modulename/filename.go
License
Package go-web3 is licensed under the GPLv3 License.