feat: api: new verified registry methods to get all allocations and claims (#11631)
* new verireg methods * update changelog and add itest * update itest and cli * update new method's support till v9 * remove gateway APIs * fix cli internal var names
This commit is contained in:
1 parent
1347bfb64e
commit
3f9b6837c9
34 files changed
+906
-75
No files matched your search
@@ -503,3 +503,152 @@ func makeVerifier(ctx context.Context, t *testing.T, api *impl.FullNodeAPI, root
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, allowance, *verifierAllowance)
|
||||
}
|
||||
|
||||
func TestVerifiedListAllAllocationsAndClaims(t *testing.T) {
|
||||
blockTime := 100 * time.Millisecond
|
||||
|
||||
rootKey, err := key.GenerateKey(types.KTSecp256k1)
|
||||
require.NoError(t, err)
|
||||
|
||||
verifier1Key, err := key.GenerateKey(types.KTSecp256k1)
|
||||
require.NoError(t, err)
|
||||
|
||||
verifiedClientKey, err := key.GenerateKey(types.KTBLS)
|
||||
require.NoError(t, err)
|
||||
|
||||
bal, err := types.ParseFIL("100fil")
|
||||
require.NoError(t, err)
|
||||
|
||||
node, miner, ens := kit.EnsembleMinimal(t, kit.MockProofs(),
|
||||
kit.RootVerifier(rootKey, abi.NewTokenAmount(bal.Int64())),
|
||||
kit.Account(verifier1Key, abi.NewTokenAmount(bal.Int64())),
|
||||
kit.Account(verifiedClientKey, abi.NewTokenAmount(bal.Int64())),
|
||||
)
|
||||
|
||||
ens.InterconnectAll().BeginMining(blockTime)
|
||||
|
||||
api := node.FullNode.(*impl.FullNodeAPI)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// get VRH
|
||||
vrh, err := api.StateVerifiedRegistryRootKey(ctx, types.TipSetKey{})
|
||||
fmt.Println(vrh.String())
|
||||
require.NoError(t, err)
|
||||
|
||||
// import the root key.
|
||||
rootAddr, err := api.WalletImport(ctx, &rootKey.KeyInfo)
|
||||
require.NoError(t, err)
|
||||
|
||||
// import the verifiers' keys.
|
||||
verifier1Addr, err := api.WalletImport(ctx, &verifier1Key.KeyInfo)
|
||||
require.NoError(t, err)
|
||||
|
||||
// import the verified client's key.
|
||||
verifiedClientAddr, err := api.WalletImport(ctx, &verifiedClientKey.KeyInfo)
|
||||
require.NoError(t, err)
|
||||
|
||||
// resolve all keys
|
||||
|
||||
// make the 2 verifiers
|
||||
|
||||
makeVerifier(ctx, t, api, rootAddr, verifier1Addr)
|
||||
|
||||
// assign datacap to a client
|
||||
initialDatacap := big.NewInt(20000)
|
||||
|
||||
params, err := actors.SerializeParams(&verifregst.AddVerifiedClientParams{Address: verifiedClientAddr, Allowance: initialDatacap})
|
||||
require.NoError(t, err)
|
||||
|
||||
msg := &types.Message{
|
||||
From: verifier1Addr,
|
||||
To: verifreg.Address,
|
||||
Method: verifreg.Methods.AddVerifiedClient,
|
||||
Params: params,
|
||||
Value: big.Zero(),
|
||||
}
|
||||
|
||||
sm, err := api.MpoolPushMessage(ctx, msg, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err := api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 0, res.Receipt.ExitCode)
|
||||
|
||||
// check datacap balance
|
||||
dcap, err := api.StateVerifiedClientStatus(ctx, verifiedClientAddr, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, *dcap, initialDatacap)
|
||||
|
||||
minerId, err := address.IDFromAddress(miner.ActorAddr)
|
||||
require.NoError(t, err)
|
||||
|
||||
allocationRequest1 := verifregst.AllocationRequest{
|
||||
Provider: abi.ActorID(minerId),
|
||||
Data: cid.MustParse("baga6ea4seaaqa"),
|
||||
Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2),
|
||||
TermMin: verifregst.MinimumVerifiedAllocationTerm,
|
||||
TermMax: verifregst.MinimumVerifiedAllocationTerm,
|
||||
Expiration: verifregst.MaximumVerifiedAllocationExpiration,
|
||||
}
|
||||
|
||||
allocationRequest2 := verifregst.AllocationRequest{
|
||||
Provider: abi.ActorID(minerId),
|
||||
Data: cid.MustParse("baga6ea4seaaqc"),
|
||||
Size: abi.PaddedPieceSize(initialDatacap.Uint64() / 2),
|
||||
TermMin: verifregst.MinimumVerifiedAllocationTerm,
|
||||
TermMax: verifregst.MinimumVerifiedAllocationTerm,
|
||||
Expiration: verifregst.MaximumVerifiedAllocationExpiration,
|
||||
}
|
||||
|
||||
allocationRequests := verifregst.AllocationRequests{
|
||||
Allocations: []verifregst.AllocationRequest{allocationRequest1, allocationRequest2},
|
||||
}
|
||||
|
||||
receiverParams, err := actors.SerializeParams(&allocationRequests)
|
||||
require.NoError(t, err)
|
||||
|
||||
transferParams, err := actors.SerializeParams(&datacap2.TransferParams{
|
||||
To: builtin.VerifiedRegistryActorAddr,
|
||||
Amount: big.Mul(initialDatacap, builtin.TokenPrecision),
|
||||
OperatorData: receiverParams,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
msg = &types.Message{
|
||||
To: builtin.DatacapActorAddr,
|
||||
From: verifiedClientAddr,
|
||||
Method: datacap.Methods.TransferExported,
|
||||
Params: transferParams,
|
||||
Value: big.Zero(),
|
||||
}
|
||||
|
||||
sm, err = api.MpoolPushMessage(ctx, msg, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err = api.StateWaitMsg(ctx, sm.Cid(), 1, lapi.LookbackNoLimit, true)
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 0, res.Receipt.ExitCode)
|
||||
|
||||
allocations, err := api.StateGetAllAllocations(ctx, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, 2, len(allocations))
|
||||
|
||||
var pcids []string
|
||||
|
||||
for _, a := range allocations {
|
||||
clientIdAddr, err := api.StateLookupID(ctx, verifiedClientAddr, types.EmptyTSK)
|
||||
require.NoError(t, err)
|
||||
clientId, err := address.IDFromAddress(clientIdAddr)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, abi.ActorID(clientId), a.Client)
|
||||
require.Equal(t, abi.ActorID(minerId), a.Provider)
|
||||
require.Equal(t, abi.PaddedPieceSize(10000), a.Size)
|
||||
pcids = append(pcids, a.Data.String())
|
||||
}
|
||||
|
||||
require.ElementsMatch(t, []string{"baga6ea4seaaqa", "baga6ea4seaaqc"}, pcids)
|
||||
|
||||
// TODO: Add claims check to this test once https://github.com/filecoin-project/lotus/pull/11618 lands
|
||||
}
|
||||
Reference in new issue
Block a user