filecoin

package module
v0.3.2 Latest Latest
Warning

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

Go to latest
Published: Apr 12, 2021 License: MIT Imports: 14 Imported by: 1

README

filecoin-client

goproxy.cn

需要自行部署Lotus Node节点:https://lotu.sh/en+getting-started

此库仅添加部分方法,但已经满足钱包充值提现逻辑了,如果需要其他方法,请Fork后自行添加。

充值流程:获取头部高度,从本地高度遍历到头部高度,再根据高度获取区块CID,根据区块CID获取区块的所有消息,判断消息的类型是否0(0为发送Fil),和接收地址是否是本地的地址。

说明请查询client_test文件。

安装

go get github.com/myxtype/filecoin-client

使用

package main

import (
	"context"
	"github.com/filecoin-project/go-address"
	"github.com/myxtype/filecoin-client"
)

func main() {
	client := filecoin.NewClient("http://127.0.0.1:1234/rpc/v0", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJyZWFkIiwid3JpdGUiLCJzaWduIiwiYWRtaW4iXX0.cF__3r_0IR9KwZ2nLkqcBW8vuPePruZieJAVvTAoUA4")

	addr, _ := address.NewFromString("t1e3soclcq34tq7wmykp7xkkmpkzjnghumm3syyay")
	bal, err := client.WalletBalance(context.Background(), addr)
	if err != nil {
		panic(err)
	}

	println(bal.String())
}

离线签名版

公共节点申请:https://infura.io

具体实现逻辑在官方库中:https://github.com/filecoin-project/go-filecoin

package main

import (
	"context"
	"encoding/hex"
	"github.com/filecoin-project/go-address"
	"github.com/filecoin-project/go-state-types/abi"
	"github.com/myxtype/filecoin-client"
	"github.com/myxtype/filecoin-client/local"
	"github.com/myxtype/filecoin-client/types"
	"github.com/shopspring/decimal"
)

func main() {
	// 设置网络类型
	address.CurrentNetwork = address.Mainnet

	// 生产新的地址
	// 新地址有转入fil才激活,不然没法用
	ki, addr, err := local.WalletNew(types.KTSecp256k1)
	if err != nil {
		panic(err)
	}

	println(hex.EncodeToString(ki.PrivateKey))
	println(addr.String())

	// 50a5e6234f5fdfc026bd889347409e11b6ef5b6034a7b0572d7e24ed1e9ba0e4
	// f1dynqskhlixt5eswpff3a72ksprqmeompv3pbesy

	to, _ := address.NewFromString("f1yfi4yslez2hz3ori5grvv3xdo3xkibc4v6xjusy")

	// 转移0.001FIL到f1yfi4yslez2hz3ori5grvv3xdo3xkibc4v6xjusy
	msg := &types.Message{
		Version:    0,
		To:         to,
		From:       *addr,
		Nonce:      0,
		Value:      filecoin.FromFil(decimal.NewFromFloat(0.001)),
		GasLimit:   0,
		GasFeeCap:  abi.NewTokenAmount(10000),
		GasPremium: abi.NewTokenAmount(10000),
		Method:     0,
		Params:     nil,
	}

	client := filecoin.New("https://1lB5G4SmGdSTikOo7l6vYlsktdd:b58884915362a99b4fc18c2bf8af8358@filecoin.infura.io")

	// 最大手续费0.0001 FIL
	//maxFee := filecoin.FromFil(decimal.NewFromFloat(0.0001))

	// 估算GasLimit
	//msg, err = client.GasEstimateMessageGas(context.Background(), msg, &types.MessageSendSpec{MaxFee: maxFee}, nil)
	//if err != nil {
	//	panic(err)
	//}

	// 离线签名
	s, err := local.WalletSignMessage(types.KTSecp256k1, ki.PrivateKey, msg)
	if err != nil {
		panic(err)
	}

	println(hex.EncodeToString(s.Signature.Data))
	// 47bcbb167fd9040bd02dba02789bc7bc0463c290db1be9b07065c12a64fb84dc546bef7aedfba789d0d7ce2c4532f8fa0d2dd998985ad3ec1a8b064c26e4625a01

	// 验证签名
	if err := local.WalletVerifyMessage(s); err != nil {
		panic(err)
	}

	mid, err := client.MpoolPush(context.Background(), s)
	if err != nil {
		panic(err)
	}

	println(mid.String())
}

暂时不支持bls类型,仅支持secp256k1,所以离线签名所有类型请选择types.KTSecp256k1

私钥存储在数据库请进行加密存储,建议进行AES加密,将AES密钥放在代码中,别放配置文件,编译到执行文件中。

Util

util.go 中提供FIL小数与大数之间的转换,但没有严格测试,请小心使用。

充值流程

参见:/examples/recharge

Lotus文档

https://lotu.sh/en+api-methods

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FromFil

func FromFil(v decimal.Decimal) abi.TokenAmount

将小数的Fil转换为大数

func ToFil

func ToFil(v abi.TokenAmount) decimal.Decimal

将大数的Fil转换为小数

Types

type Client added in v0.0.3

type Client struct {
	// contains filtered or unexported fields
}

func New added in v0.0.4

func New(addr string) *Client

func NewClient

func NewClient(addr string, token string) *Client

func (*Client) AuthNew added in v0.0.4

func (c *Client) AuthNew(ctx context.Context, perms []string) ([]byte, error)

AuthNew

func (*Client) AuthVerify added in v0.0.4

func (c *Client) AuthVerify(ctx context.Context, token string) ([]string, error)

AuthVerify

func (*Client) BeaconGetEntry added in v0.0.4

func (c *Client) BeaconGetEntry(ctx context.Context, epoch int64) (*types.BeaconEntry, error)

BeaconGetEntry returns the beacon entry for the given filecoin epoch. If the entry has not yet been produced, the call will block until the entry becomes available

func (*Client) ChainExport added in v0.0.4

func (c *Client) ChainExport(ctx context.Context, tsk types.TipSetKey) ([]byte, error)

ChainExport returns a stream of bytes with CAR dump of chain data.

func (*Client) ChainGetBlock added in v0.0.4

func (c *Client) ChainGetBlock(ctx context.Context, id cid.Cid) (*types.BlockHeader, error)

ChainGetBlock returns the block specified by the given CID.

func (*Client) ChainGetBlockMessages added in v0.0.3

func (c *Client) ChainGetBlockMessages(ctx context.Context, id cid.Cid) (*types.BlockMessages, error)

ChainGetBlockMessages returns messages stored in the specified block.

func (*Client) ChainGetGenesis added in v0.0.4

func (c *Client) ChainGetGenesis(ctx context.Context) (*types.TipSet, error)

ChainGetGenesis returns the genesis tipset.

func (*Client) ChainGetMessage added in v0.0.3

func (c *Client) ChainGetMessage(ctx context.Context, id cid.Cid) (*types.Message, error)

ChainGetMessage reads a message referenced by the specified CID from the chain blockstore.

func (*Client) ChainGetNode added in v0.0.4

func (c *Client) ChainGetNode(ctx context.Context, p string) (*types.IpldObject, error)

ChainGetNode

func (*Client) ChainGetParentMessages added in v0.0.4

func (c *Client) ChainGetParentMessages(ctx context.Context, id cid.Cid) ([]types.ParentMessage, error)

ChainGetParentMessages returns messages stored in parent tipset of the specified block.

func (*Client) ChainGetParentReceipts added in v0.0.4

func (c *Client) ChainGetParentReceipts(ctx context.Context, id cid.Cid) ([]*types.MessageReceipt, error)

ChainGetParentReceipts returns receipts for messages in parent tipset of the specified block.

func (*Client) ChainGetPath added in v0.0.4

func (c *Client) ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) (*types.HeadChange, error)

ChainGetPath returns a set of revert/apply operations needed to get from one tipset to another

func (*Client) ChainGetRandomnessFromBeacon added in v0.0.4

func (c *Client) ChainGetRandomnessFromBeacon(ctx context.Context, tsk types.TipSetKey, personalization int64, randEpoch int64, entropy []byte) ([]byte, error)

ChainGetRandomnessFromBeacon is used to sample the beacon for randomness.

func (*Client) ChainGetRandomnessFromTickets added in v0.0.4

func (c *Client) ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization int64, randEpoch int64, entropy []byte) ([]byte, error)

ChainGetRandomnessFromTickets is used to sample the chain for randomness.

func (*Client) ChainGetTipSet added in v0.0.4

func (c *Client) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error)

ChainGetTipSet returns the tipset specified by the given TipSetKey.

func (*Client) ChainGetTipSetByHeight added in v0.0.3

func (c *Client) ChainGetTipSetByHeight(ctx context.Context, height int64, tsk types.TipSetKey) (*types.TipSet, error)

ChainGetTipSetByHeight looks back for a tipset at the specified epoch. If there are no blocks at the specified epoch, a tipset at an earlier epoch will be returned.

func (*Client) ChainHasObj added in v0.0.4

func (c *Client) ChainHasObj(ctx context.Context, o cid.Cid) (bool, error)

ChainHasObj checks if a given CID exists in the chain blockstore.

func (*Client) ChainHead added in v0.0.3

func (c *Client) ChainHead(ctx context.Context) (*types.TipSet, error)

ChainHead returns the current head of the chain.

func (*Client) ChainNotify added in v0.0.4

func (c *Client) ChainNotify()

ChainNotify returns channel with chain head updates. First message is guaranteed to be of len == 1, and type == 'current'.

func (*Client) ChainReadObj added in v0.0.4

func (c *Client) ChainReadObj(ctx context.Context, obj cid.Cid) ([]byte, error)

ChainReadObj reads ipld nodes referenced by the specified CID from chain blockstore and returns raw bytes.

func (*Client) ChainSetHead added in v0.0.4

func (c *Client) ChainSetHead(ctx context.Context, tsk types.TipSetKey) error

ChainSetHead forcefully sets current chain head. Use with caution.

func (*Client) ChainStatObj added in v0.0.4

func (c *Client) ChainStatObj(ctx context.Context, obj, base cid.Cid) (types.ObjStat, error)

ChainStatObj returns statistics about the graph referenced by 'obj'. If 'base' is also specified, then the returned stat will be a diff between the two objects.

func (*Client) ChainTipSetWeight added in v0.0.4

func (c *Client) ChainTipSetWeight(ctx context.Context, tsk types.TipSetKey) (decimal.Decimal, error)

ChainTipSetWeight computes weight for the specified tipset.

func (*Client) FilecoinMethod added in v0.0.3

func (c *Client) FilecoinMethod(method string) string

Namespace Filecoin

func (*Client) GasEstimateGasLimit added in v0.0.3

func (c *Client) GasEstimateGasLimit(ctx context.Context, message *types.Message, cids []*cid.Cid) (int64, error)

GasEstimateGasLimit estimates gas used by the message and returns it. It fails if message fails to execute.

func (*Client) GasEstimateMessageGas added in v0.0.3

func (c *Client) GasEstimateMessageGas(ctx context.Context, message *types.Message, spec *types.MessageSendSpec, cids []*cid.Cid) (*types.Message, error)

GasEstimateMessageGas estimates gas values for unset message gas fields

func (*Client) MpoolGetNonce added in v0.3.1

func (c *Client) MpoolGetNonce(ctx context.Context, address address.Address) (nonce uint64, err error)

MpoolGetNonce 获取指定发送账号的下一个nonce值

func (*Client) MpoolPush added in v0.0.3

func (c *Client) MpoolPush(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error)

MpoolPush pushes a signed message to mempool.

func (*Client) Request added in v0.0.3

func (c *Client) Request(ctx context.Context, method string, result interface{}, params ...interface{}) error

Request call RPC method

func (*Client) SetToken added in v0.0.4

func (c *Client) SetToken(token string) *Client

SetToken set Authorization token

func (*Client) StateGetActor added in v0.0.3

func (c *Client) StateGetActor(ctx context.Context, addr address.Address, cids []*cid.Cid) (*types.Actor, error)

StateGetActor returns the indicated actor's nonce and balance.

func (*Client) StateGetReceipt added in v0.0.3

func (c *Client) StateGetReceipt(ctx context.Context, id cid.Cid, cids []*cid.Cid) (*types.MessageReceipt, error)

StateGetReceipt returns the message receipt for the given message

func (*Client) StateReplay added in v0.0.5

func (c *Client) StateReplay(ctx context.Context, tsk types.TipSetKey, mc cid.Cid) (*types.InvocResult, error)

StateReplay returns the result of executing the indicated message, assuming it was executed in the indicated tipset.

func (*Client) StateSearchMsg added in v0.0.5

func (c *Client) StateSearchMsg(ctx context.Context, msg cid.Cid) (*types.MsgLookup, error)

StateSearchMsg searches for a message in the chain, and returns its receipt and the tipset where it was executed

func (*Client) Version added in v0.0.4

func (c *Client) Version(ctx context.Context) (*types.Version, error)

Version Get Lotus Node version

func (*Client) WalletBalance added in v0.0.3

func (c *Client) WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error)

WalletBalance returns the balance of the given address at the current head of the chain.

func (*Client) WalletDefaultAddress added in v0.0.3

func (c *Client) WalletDefaultAddress(ctx context.Context) (address.Address, error)

WalletDefaultAddress returns the address marked as default in the wallet.

func (*Client) WalletDelete added in v0.0.4

func (c *Client) WalletDelete(ctx context.Context, addr address.Address) error

WalletDelete deletes an address from the wallet.

func (*Client) WalletExport added in v0.0.3

func (c *Client) WalletExport(ctx context.Context, addr address.Address) (*types.KeyInfo, error)

WalletExport returns the private key of an address in the wallet.

func (*Client) WalletHas added in v0.0.3

func (c *Client) WalletHas(ctx context.Context, addr address.Address) (bool, error)

WalletHas indicates whether the given address is in the wallet.

func (*Client) WalletImport added in v0.0.3

func (c *Client) WalletImport(ctx context.Context, ki *types.KeyInfo) (address.Address, error)

WalletImport receives a KeyInfo, which includes a private key, and imports it into the wallet.

func (*Client) WalletList added in v0.0.4

func (c *Client) WalletList(ctx context.Context) ([]address.Address, error)

WalletList lists all the addresses in the wallet.

func (*Client) WalletNew added in v0.0.3

func (c *Client) WalletNew(ctx context.Context, typ types.KeyType) (address.Address, error)

WalletNew creates a new address in the wallet with the given KeyType.

func (*Client) WalletSetDefault added in v0.0.3

func (c *Client) WalletSetDefault(ctx context.Context, addr address.Address) error

WalletSetDefault marks the given address as as the default one.

func (*Client) WalletSign added in v0.0.3

func (c *Client) WalletSign(ctx context.Context, addr address.Address, data []byte) (*crypto.Signature, error)

WalletSign signs the given bytes using the given address.

func (*Client) WalletSignMessage added in v0.0.3

func (c *Client) WalletSignMessage(ctx context.Context, addr address.Address, message *types.Message) (*types.SignedMessage, error)

WalletSignMessage signs the given message using the given address.

func (*Client) WalletVerify added in v0.0.4

func (c *Client) WalletVerify(ctx context.Context, k string, msg []byte, sig *crypto.Signature) (bool, error)

WalletVerify takes an address, a signature, and some bytes, and indicates whether the signature is valid. The address does not have to be in the wallet.

Directories

Path Synopsis
examples
pkg
btcec
Package btcec implements support for the elliptic curves needed for bitcoin.
Package btcec implements support for the elliptic curves needed for bitcoin.
bls

Jump to

Keyboard shortcuts

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