-
Notifications
You must be signed in to change notification settings - Fork 0
/
account.go
56 lines (49 loc) · 1.5 KB
/
account.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package main
import (
"context"
"encoding/hex"
"fmt"
"log"
"math/big"
"os"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func account() {
var (
ctx = context.Background()
url = "https://eth-mainnet.g.alchemy.com/v2/" + os.Getenv("ALCHEMY_ID")
client, err = ethclient.DialContext(ctx, url)
)
if err != nil {
log.Fatal(err)
}
// EOA
account := common.HexToAddress("0xab5801a7d398351b8be11c439e05c5b3259aec9b") // vitalik
balance, err := client.BalanceAt(context.Background(), account, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("account current eth balance =", balance, "wei")
blockNumber := big.NewInt(15500000)
balanceAt, err := client.BalanceAt(context.Background(), account, blockNumber)
if err != nil {
log.Fatal(err)
}
balanceAtFloat := big.NewFloat(0)
balanceAtFloat.SetString(balanceAt.String())
balanceAtFloat.Quo(balanceAtFloat, big.NewFloat(1e18))
fmt.Println("account blocknum 15500000 eth balance =", balanceAtFloat, "eth")
// CA
contractAccount := common.HexToAddress("0x220866B1A2219f40e72f5c628B65D54268cA3A9D") // vitalik multisig
contractBalance, err := client.BalanceAt(context.Background(), contractAccount, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("smart contract account eth balance =", contractBalance, "wei")
code, err := client.CodeAt(context.Background(), contractAccount, nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("smart contract deployed code =", hex.EncodeToString(code))
}