wallet

package module
v1.6.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 25, 2023 License: MIT Imports: 1 Imported by: 0

README

Install

go get github.com/zlabwork/go-wallet

go get github.com/zlabwork/go-wallet@v1.5.0

Todo

Support transfer for P2sh, P2wsh, MultiP2wsh, MultiP2wshInP2sh

BTC

// 地址与私钥
priKey := btc.NewPriKeyRandom()
priKey.WIF() // L211iZmidtxLQ2s7hzM9BYacPUu2asT1KkCkyrTbNbDib2N85ai5
pubKey := priKey.PubKey()
address1 := pubKey.Address().P2pkh() // 19c4pkCL2jvTFYkZXDyUHi4ceoNze44mXE
address2 := pubKey.Address().P2sh()  // 3AJ5kHgmaeEqLiSzeKe4iLRYoKfiCH5Y1C
// 交易
// btc.SetNetwork("testnet")
c := &btc.HandleConfigs{
    Host: "http://127.0.0.1:18443",
    User: "user",
    Pass: "pass123456",
}
cli := btc.NewRpcClient(c)

// 输入 [tx:vout]
ins := []string{
    "47c1c015beceb04c9772bb0575366078bc1f26edaf7bd271a1e31369ee1a88a3:0",
    "47c1c015beceb04c9772bb0575366078bc1f26edaf7bd271a1e31369ee1a88a3:1",
    "166858e738b77da7164a26e17f5bf2ffc6cfec0c10537a3810306aa9a3d0b309:0",
}
// 输出
outs := map[string]int64{
    "bc1q7k85507tl9n2aguczwkjn9ytjvjvtc07g5yqsk": 2499000000, // 24.99 BTC
    "1MVf99Vv8ZbFXXL4UwUnQbTLaAphBNeGFW":         2499000000, // int64(24.99 * math.Pow10(8))
}
// 生成交易 changeAddress 为找零地址
// b, err := cli.CreateTransferAll(ins, "1PPQCxxDqSpjxu8N2kEkEimrfUcpWT4Duc", 10)
b, _ := cli.CreateTXAlias(ins, outs, "", 10, "1PPQCxxDqSpjxu8N2kEkEimrfUcpWT4Duc")
// 交易签名
signedHex, _ := cli.SignRawTX(b, []string{"cUQMEcP7RA8jJ32hghcCwSv55o29SzwS77LpZ5GSU5fsNi3tHFXc"})
// 发送交易数据
txId, err := cli.SendRawTX(signedHex)

BCH

import "github.com/zlabwork/go-wallet/bch"

priKey := bch.NewPriKeyRandom()
address := priKey.PubKey().Address().P2pkh()
log.Println(address) // qzz6eq5we2qdxg29jkzxkxafc34xhduk7vhayz3z06

ETH

import "github.com/zlabwork/go-wallet/eth"

priKey := eth.NewPriKeyRandom()
priKey.Address().String()

// 测试网络
handle, _ := eth.NewServiceHandle("http://127.0.0.1:8545")
handle.GetBalance("0x06****11")

// 正式网络 
// https://infura.io/ 需要申请一个KEY
// eth.NewServiceHandle("https://mainnet.infura.io/v3/xxxxxxxx")
// eth.NewServiceHandle("wss://mainnet.infura.io/ws/v3/xxxxxxxx")

ETH 合约

// prikey is keystore json file string
priKey := `{"address":"070036c8934faa2a04c8ed042cb1532281111111","crypto":{"cipher":"aes-128-ctr","ciphertext":"","mac":""},"id":"","version":3}`
contractAddr := common.HexToAddress("0x3B30d8eC339a1B2229aeFaf65673586638D75a4d")
myAddr := common.HexToAddress("0x070036c8934faa2A04c8ed042cb1532281111111")
toAddr := common.HexToAddress("0x6771C0068ae24ac6602831DceA34b1764C69c2b8")

// 1. conn
conn, err := ethclient.Dial("http://127.0.0.1:8545")
if err != nil {
    log.Fatalf("Failed to connect to the Ethereum client: %v", err)
}

// 2. contract with address
token, err := contract.NewToken(contractAddr, conn)
if err != nil {
    log.Fatalf("Failed to instantiate a Token contract: %v", err)
}

// get info
token.Name(nil)              // get name
token.Symbol(nil)            // get symbol
token.BalanceOf(nil, myAddr) // get balance

// 3. auth
auth, err := bind.NewTransactorWithChainID(strings.NewReader(priKey), "secret password", big.NewInt(999))
if err != nil {
    log.Fatalf("Failed to create authorized transactor: %v", err)
}

// 4. transfer 2 token
tx, err := token.Transfer(auth, toAddr, big.NewInt(2000000000000000000))
if err != nil {
    log.Fatalf("Failed to request token transfer: %v", err)
}

// tx hash
fmt.Println(tx.Hash().String())

Transaction

Standard Pubkey Script
Deconstructing Transactions

  1. Pay To Public Key Hash (P2PKH)
  2. Pay To Script Hash (P2SH)
  3. Multisig
  4. Pubkey
  5. Null Data
# P2PKH
Pubkey script: OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Signature script: <sig> <pubkey>

# P2SH
Pubkey script: OP_HASH160 <Hash160(redeemScript)> OP_EQUAL
Signature script: <sig> [sig] [sig...] <redeemScript>

# Multisig
Pubkey script: <m> <A pubkey> [B pubkey] [C pubkey...] <n> OP_CHECKMULTISIG
Signature script: OP_0 <A sig> [B sig] [C sig...]

# Pubkey
Pubkey script: <pubkey> OP_CHECKSIG
Signature script: <sig>

# Null Data
Pubkey Script: OP_RETURN <0 to 40 bytes of data>
(Null data scripts cannot be spent, so there's no signature script.)

Bitcoin Transaction

bitcoin-tx

TxBinaryMap

HD Wallet Example

HD Wallet Example

钱包工具

Docs

1. articles

椭圆曲线文档
Graphical Address Generator

2. bch

BCH地址规则
https://github.com/gcash/bchutil

3. wallet

bip-0044
钱包兼容性汇总

4. transactions

btc transactions
btc Script

Tools

椭圆曲线图形
SegWit address format

Similar Tools

python bitcoin-utils

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BchAddress

type BchAddress interface {
	P2pkh() string
	P2sh() string
}

type BtcAddress

type BtcAddress interface {
	P2pkh() string
	P2sh() string
	P2wpkh() string
	P2wsh() string
	P2wpkhInP2sh() string
}

type ERC20

type ERC20 interface {
	Name() string
	Symbol() string
	Decimals() uint8
	TotalSupply() big.Int
	BalanceOf() big.Int
	Transfer(string, big.Int) bool
	TransferFrom(string, string, big.Int) bool
	Approve(string, big.Int) bool
	Allowance(string, string) big.Int
	EventTransfer(string, string, big.Int)
	EventApproval(string, string, big.Int)
}

type EthAddress

type EthAddress [20]byte

type PriKey

type PriKey interface {
	Bytes() []byte
	Base64() string
	Hex() string
}

type PubKey

type PubKey interface {
	Bytes() []byte
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL