81ba6ab6f0
* feat: lp mig - first few steps * lp mig: default tasks * code comments * docs * lp-mig-progress * shared * comments and todos * fix: curio: rename lotus-provider to curio (#11645) * rename provider to curio * install gotext * fix lint errors, mod tidy * fix typo * fix API_INFO and add gotext to circleCI * add back gotext * add gotext after remerge * lp: channels doc * finish easy-migration TODOs * out generate * merging and more renames * avoid make-all * minor doc stuff * cu: make gen * make gen fix * make gen * tryfix * go mod tidy * minor ez migration fixes * ez setup - ui cleanups * better error message * guided setup colors * better path to saveconfigtolayer * loadconfigwithupgrades fix * readMiner oops * guided - homedir * err if miner is running * prompt error should exit * process already running, miner_id sectors in migration * dont prompt for language a second time * check miner stopped * unlock repo * render and sql oops * curio easyMig - some fixes * easyMigration runs successfully * lint * review fixes * fix backup path * fixes1 * fixes2 * fixes 3 --------- Co-authored-by: LexLuthr <88259624+LexLuthr@users.noreply.github.com> Co-authored-by: LexLuthr <lexluthr@protocol.ai>
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
package multictladdr
|
|
|
|
import (
|
|
"context"
|
|
|
|
logging "github.com/ipfs/go-log/v2"
|
|
|
|
"github.com/filecoin-project/go-address"
|
|
"github.com/filecoin-project/go-state-types/abi"
|
|
"github.com/filecoin-project/go-state-types/big"
|
|
|
|
"github.com/filecoin-project/lotus/api"
|
|
"github.com/filecoin-project/lotus/chain/types"
|
|
"github.com/filecoin-project/lotus/storage/ctladdr"
|
|
)
|
|
|
|
var log = logging.Logger("curio/multictladdr")
|
|
|
|
type MultiAddressSelector struct {
|
|
MinerMap map[address.Address]api.AddressConfig
|
|
}
|
|
|
|
func (as *MultiAddressSelector) AddressFor(ctx context.Context, a ctladdr.NodeApi, minerID address.Address, mi api.MinerInfo, use api.AddrUse, goodFunds, minFunds abi.TokenAmount) (address.Address, abi.TokenAmount, error) {
|
|
if as == nil {
|
|
// should only happen in some tests
|
|
log.Warnw("smart address selection disabled, using worker address")
|
|
return mi.Worker, big.Zero(), nil
|
|
}
|
|
|
|
tmp := as.MinerMap[minerID]
|
|
|
|
var addrs []address.Address
|
|
switch use {
|
|
case api.PreCommitAddr:
|
|
addrs = append(addrs, tmp.PreCommitControl...)
|
|
case api.CommitAddr:
|
|
addrs = append(addrs, tmp.CommitControl...)
|
|
case api.TerminateSectorsAddr:
|
|
addrs = append(addrs, tmp.TerminateControl...)
|
|
case api.DealPublishAddr:
|
|
addrs = append(addrs, tmp.DealPublishControl...)
|
|
default:
|
|
defaultCtl := map[address.Address]struct{}{}
|
|
for _, a := range mi.ControlAddresses {
|
|
defaultCtl[a] = struct{}{}
|
|
}
|
|
delete(defaultCtl, mi.Owner)
|
|
delete(defaultCtl, mi.Worker)
|
|
|
|
configCtl := append([]address.Address{}, tmp.PreCommitControl...)
|
|
configCtl = append(configCtl, tmp.CommitControl...)
|
|
configCtl = append(configCtl, tmp.TerminateControl...)
|
|
configCtl = append(configCtl, tmp.DealPublishControl...)
|
|
|
|
for _, addr := range configCtl {
|
|
if addr.Protocol() != address.ID {
|
|
var err error
|
|
addr, err = a.StateLookupID(ctx, addr, types.EmptyTSK)
|
|
if err != nil {
|
|
log.Warnw("looking up control address", "address", addr, "error", err)
|
|
continue
|
|
}
|
|
}
|
|
|
|
delete(defaultCtl, addr)
|
|
}
|
|
|
|
for a := range defaultCtl {
|
|
addrs = append(addrs, a)
|
|
}
|
|
}
|
|
|
|
if len(addrs) == 0 || !tmp.DisableWorkerFallback {
|
|
addrs = append(addrs, mi.Worker)
|
|
}
|
|
if !tmp.DisableOwnerFallback {
|
|
addrs = append(addrs, mi.Owner)
|
|
}
|
|
|
|
return ctladdr.PickAddress(ctx, a, mi, goodFunds, minFunds, addrs)
|
|
}
|