|
8 | 8 | tap "github.com/lightninglabs/taproot-assets"
|
9 | 9 | "github.com/lightninglabs/taproot-assets/fn"
|
10 | 10 | "github.com/lightninglabs/taproot-assets/internal/test"
|
| 11 | + "github.com/lightninglabs/taproot-assets/proof" |
11 | 12 | "github.com/lightninglabs/taproot-assets/tappsbt"
|
12 | 13 | "github.com/lightninglabs/taproot-assets/taprpc"
|
13 | 14 | wrpc "github.com/lightninglabs/taproot-assets/taprpc/assetwalletrpc"
|
@@ -512,6 +513,8 @@ func runMultiSendTest(ctxt context.Context, t *harnessTest, alice,
|
512 | 513 | require.NoError(t.t, err)
|
513 | 514 | }
|
514 | 515 |
|
| 516 | +// sendProof manually exports a proof from the given source node and imports it |
| 517 | +// using the development only ImportProof RPC on the destination node. |
515 | 518 | func sendProof(t *harnessTest, src, dst *tapdHarness, scriptKey []byte,
|
516 | 519 | genInfo *taprpc.GenesisInfo) *tapdevrpc.ImportProofResponse {
|
517 | 520 |
|
@@ -543,6 +546,85 @@ func sendProof(t *harnessTest, src, dst *tapdHarness, scriptKey []byte,
|
543 | 546 | return importResp
|
544 | 547 | }
|
545 | 548 |
|
| 549 | +// sendProofUniRPC manually exports a proof from the given source node and |
| 550 | +// imports it using the universe related InsertProof RPC on the destination |
| 551 | +// node. |
| 552 | +func sendProofUniRPC(t *harnessTest, src, dst *tapdHarness, scriptKey []byte, |
| 553 | + genInfo *taprpc.GenesisInfo) *unirpc.AssetProofResponse { |
| 554 | + |
| 555 | + ctxb := context.Background() |
| 556 | + |
| 557 | + var proofResp *taprpc.ProofFile |
| 558 | + waitErr := wait.NoError(func() error { |
| 559 | + resp, err := src.ExportProof(ctxb, &taprpc.ExportProofRequest{ |
| 560 | + AssetId: genInfo.AssetId, |
| 561 | + ScriptKey: scriptKey, |
| 562 | + }) |
| 563 | + if err != nil { |
| 564 | + return err |
| 565 | + } |
| 566 | + |
| 567 | + proofResp = resp |
| 568 | + return nil |
| 569 | + }, defaultWaitTimeout) |
| 570 | + require.NoError(t.t, waitErr) |
| 571 | + |
| 572 | + t.Logf("Importing proof %x using InsertProof", proofResp.RawProofFile) |
| 573 | + |
| 574 | + f := proof.File{} |
| 575 | + err := f.Decode(bytes.NewReader(proofResp.RawProofFile)) |
| 576 | + require.NoError(t.t, err) |
| 577 | + |
| 578 | + lastProof, err := f.LastProof() |
| 579 | + require.NoError(t.t, err) |
| 580 | + |
| 581 | + var lastProofBytes bytes.Buffer |
| 582 | + err = lastProof.Encode(&lastProofBytes) |
| 583 | + require.NoError(t.t, err) |
| 584 | + asset := lastProof.Asset |
| 585 | + |
| 586 | + proofType := universe.ProofTypeTransfer |
| 587 | + if asset.IsGenesisAsset() { |
| 588 | + proofType = universe.ProofTypeIssuance |
| 589 | + } |
| 590 | + |
| 591 | + uniID := universe.Identifier{ |
| 592 | + AssetID: asset.ID(), |
| 593 | + ProofType: proofType, |
| 594 | + } |
| 595 | + if asset.GroupKey != nil { |
| 596 | + uniID.GroupKey = &asset.GroupKey.GroupPubKey |
| 597 | + } |
| 598 | + |
| 599 | + rpcUniID, err := tap.MarshalUniID(uniID) |
| 600 | + require.NoError(t.t, err) |
| 601 | + |
| 602 | + outpoint := &unirpc.Outpoint{ |
| 603 | + HashStr: lastProof.AnchorTx.TxHash().String(), |
| 604 | + Index: int32(lastProof.InclusionProof.OutputIndex), |
| 605 | + } |
| 606 | + |
| 607 | + importResp, err := dst.InsertProof(ctxb, &unirpc.AssetProof{ |
| 608 | + Key: &unirpc.UniverseKey{ |
| 609 | + Id: rpcUniID, |
| 610 | + LeafKey: &unirpc.AssetKey{ |
| 611 | + Outpoint: &unirpc.AssetKey_Op{ |
| 612 | + Op: outpoint, |
| 613 | + }, |
| 614 | + ScriptKey: &unirpc.AssetKey_ScriptKeyBytes{ |
| 615 | + ScriptKeyBytes: scriptKey, |
| 616 | + }, |
| 617 | + }, |
| 618 | + }, |
| 619 | + AssetLeaf: &unirpc.AssetLeaf{ |
| 620 | + Proof: lastProofBytes.Bytes(), |
| 621 | + }, |
| 622 | + }) |
| 623 | + require.NoError(t.t, err) |
| 624 | + |
| 625 | + return importResp |
| 626 | +} |
| 627 | + |
546 | 628 | // sendAssetsToAddr spends the given input asset and sends the amount specified
|
547 | 629 | // in the address to the Taproot output derived from the address.
|
548 | 630 | func sendAssetsToAddr(t *harnessTest, sender *tapdHarness,
|
|
0 commit comments