Categorygithub.com/the-web3/eth-wallet
modulepackage
0.0.0-20241123124255-8896b81afd6b
Repository: https://github.com/the-web3/eth-wallet.git
Documentation: pkg.go.dev

# README

Ethereum Exchange Wallet

Ethereum centralized wallet include deposit, withdraw, collection and tranfer token to cold wallet

Note: Requires Go 1.21+

Installation

For prerequisites and detailed build instructions please read the Installation instructions. Once the dependencies are installed, run:

make eth-wallet

Or check out the latest release.

Config env

ETH_WALLET_MIGRATIONS_DIR="./migrations"

ETH_WALLET_CHAIN_ID=17000
ETH_WALLET_RPC_RUL="please type your ethereum rpc url"
ETH_WALLET_STARTING_HEIGHT=1960574
ETH_WALLET_CONFIRMATIONS=32
ETH_WALLET_DEPOSIT_INTERVAL=5s
ETH_WALLET_WITHDRAW_INTERVAL=5s
ETH_WALLET_COLLECT_INTERVAL=5s
ETH_WALLET_BLOCKS_STEP=5

ETH_WALLET_HTTP_PORT=8989
ETH_WALLET_HTTP_HOST="127.0.0.1"
ETH_WALLET_RPC_PORT=8980
ETH_WALLET_RPC_HOST="127.0.0.1"
ETH_WALLET_METRICS_PORT=8990
ETH_WALLET_METRICS_HOST="127.0.0.1"

ETH_WALLET_SLAVE_DB_ENABLE=false

ETH_WALLET_MASTER_DB_HOST="127.0.0.1"
ETH_WALLET_MASTER_DB_PORT=5432
ETH_WALLET_MASTER_DB_USER="guoshijiang"
ETH_WALLET_MASTER_DB_PASSWORD=""
ETH_WALLET_MASTER_DB_NAME="eth_wallet"

ETH_WALLET_SLAVE_DB_HOST="127.0.0.1"
ETH_WALLET_SLAVE_DB_PORT=5432
ETH_WALLET_SLAVE_DB_USER="guoshijiang"
ETH_WALLET_SLAVE_DB_PASSWORD=""
ETH_WALLET_SLAVE_DB_NAME="eth_wallet"

ETH_WALLET_API_CACHE_LIST_SIZE=0
ETH_WALLET_API_CACHE_LIST_DETAIL=0
ETH_WALLET_API_CACHE_LIST_EXPIRE_TIME=0
ETH_WALLET_API_CACHE_DETAIL_EXPIRE_TIME=0

Quick Start

1.create database

create database eth_wallet;

2.migrate your database

command

./eth-wallet migrate

execute result

check

postgres=# \c eth_wallet
您现在已经连接到数据库 "eth_wallet",用户 "guoshijiang".
eth_wallet=# \d
                    关联列表
 架构模式 |     名称     |  类型  |   拥有者
----------+--------------+--------+-------------
 public   | addresses    | 数据表 | guoshijiang
 public   | balances     | 数据表 | guoshijiang
 public   | blocks       | 数据表 | guoshijiang
 public   | deposits     | 数据表 | guoshijiang
 public   | tokens       | 数据表 | guoshijiang
 public   | transactions | 数据表 | guoshijiang
 public   | withdraws    | 数据表 | guoshijiang
(7 行记录)

eth_wallet=#

3.batch address generate

command

./eth-wallet generate-address

check

eth_wallet=# select count(*) from addresses;
 count
-------
   100
(1 行记录)

eth_wallet=#

startup wallet

command

./eth-wallet wallet

check

INFO [07-20|16:26:52.255] exec wallet sync
INFO [07-20|16:26:52.255] loaded chain config                      config="{ChainID:17000 RpcUrl:https://eth-holesky.g.alchemy.com/v2/BvSZ5ZfdIwB-5SDXMz8PfGcbICYQqwrl StartingHeight:1964509 Confirmations:64 DepositInterval:5000 WithdrawInterval:500 CollectInterval:500 ColdInterval:500 BlocksStep:5}"

2024/07/20 16:26:52 /Users/guoshijiang/theweb3/eth-wallet/database/blocks.go:56 record not found
[5.827ms] [rows:0] SELECT * FROM "blocks" ORDER BY number DESC LIMIT 1
INFO [07-20|16:26:52.758] no sync indexed state starting from supplied ethereum height height=1,964,509
INFO [07-20|16:26:53.471] start deposit......
INFO [07-20|16:26:53.472] start withdraw......

Change Rpc Protobuf

if change wallet.proto code, you should execute proto.sh compile it to golang language.

./proto.sh

API

1.Http api

1.1. startup rest api

./eth-wallet api

1.2. call api

get deposits
  • request example
curl --location --request GET 'http://127.0.0.1:8989/api/v1/deposits?address=0xc144779fa97544872879ec162fcd7367141db17f&page=1&pageSize=10' \
--form 'address="0x62a58ec98bbc1a1b348554a19996305edc224e32"' \
--form 'page="1"' \
--form 'pageSize="10"'
  • result
{
    "Current": 1,
    "Size": 10,
    "Total": 2,
    "Records": [
        {
            "guid": "e6277fd2-4672-11ef-a12f-0e6e6b1f0bae",
            "block_hash": "0x2515a19d875ffdacae62d20a0f6eddfd3a35206aa07b5cfdc0c49abe7148a9cf",
            "BlockNumber": 1964544,
            "hash": "0x19a97821f6337789294eae9f8ce21455aa05b9e31737e3f48394413e3d0d36a1",
            "from_address": "0x72ffaa289993bcada2e01612995e5c75dd81cdbc",
            "to_address": "0xc144779fa97544872879ec162fcd7367141db17f",
            "token_address": "0x0000000000000000000000000000000000000000",
            "Fee": 176820000,
            "Amount": 100000000000000000,
            "status": 1,
            "TransactionIndex": 59,
            "Timestamp": 1721464476
        },
        {
            "guid": "3835ecd8-4672-11ef-a12f-0e6e6b1f0bae",
            "block_hash": "0xcd8835a2f98bd51f3f88be4b248e52534c251b86aaa6bf0ed2785280d67c2f81",
            "BlockNumber": 1964522,
            "hash": "0x6841a22be3ae7b1c138057ae522017f652f49b579b6c5a26b8727e1f1ce899c8",
            "from_address": "0x72ffaa289993bcada2e01612995e5c75dd81cdbc",
            "to_address": "0xc144779fa97544872879ec162fcd7367141db17f",
            "token_address": "0x0000000000000000000000000000000000000000",
            "Fee": 182301000,
            "Amount": 10000000000000000,
            "status": 1,
            "TransactionIndex": 26,
            "Timestamp": 1721464185
        }
    ]
}
get withdraws
  • request example
curl --location --request GET 'http://127.0.0.1:8989/api/v1/withdrawals?address=0x62a58ec98bbc1a1b348554a19996305edc224e32&page=1&pageSize=10' \
--form 'address="0x62a58ec98bbc1a1b348554a19996305edc224e32"' \
--form 'page="1"' \
--form 'pageSize="10"'
  • result
{
    "Current": 1,
    "Size": 10,
    "Total": 1,
    "Records": [
        {
            "guid": "803fd471-e74a-403e-a934-1b917e801518",
            "block_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
            "BlockNumber": 1,
            "hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
            "from_address": "0x62a58ec98bbc1a1b348554a19996305edc224e32",
            "to_address": "0x62a58ec98bbc1a1b348554a19996305edc224e32",
            "token_address": "0x62a58ec98bbc1a1b348554a19996305edc224e32",
            "Fee": 1,
            "Amount": 1000000000000000000,
            "status": 0,
            "TransactionIndex": 1,
            "tx_sign_hex": "",
            "Timestamp": 1721466415
        }
    ]
}
submit withdraws
  • request example
curl --location --request POST 'http://127.0.0.1:8989/api/v1/submit/withdrawals?fromAddress=0x62a58ec98bbc1a1b348554a19996305edc224e32&toAddress=0x62a58ec98bbc1a1b348554a19996305edc224e32&tokenAddress=0x62a58ec98bbc1a1b348554a19996305edc224e32&amount=1000000000000000000'
  • result
{
    "code": 2000,
    "msg": "submit transaction success"
}

2.Rpc api

2.1. startup rpc api

./eth-wallet rpc

2.2 use grpcui as tool to request rpc server

grpcui -plaintext 127.0.0.1:8089

2.3.call rpc

  • request example
grpcurl -plaintext -d '{
  "requestId": "11111",
  "chainId": "11",
  "fromAddress": "0xc144779fa97544872879ec162fcd7367141db17f",
  "toAddress": "0xc144779fa97544872879ec162fcd7367141db171",
  "tokenAddress": "0x00",
  "amount": "10000000000000000000"
}' 127.0.0.1:8980 services.thewebthree.wallet.WalletService.submitWithdrawInfo
  • result
{
  "code": "2000",
  "msg": "submit withdraw success",
  "hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author

# Structs

No description provided by the author