Skip to content

Commit 50f0546

Browse files
Add endpoints for getting possessions and ownerships by universe index
1 parent 5886c2c commit 50f0546

File tree

10 files changed

+971
-402
lines changed

10 files changed

+971
-402
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package rpc
2+
3+
import (
4+
"github.com/pkg/errors"
5+
"github.com/qubic/go-node-connector/types"
6+
"github.com/qubic/qubic-http/protobuff"
7+
)
8+
9+
func convertAssetIssuance(source types.AssetIssuance) (*protobuff.AssetIssuance, error) {
10+
var issuerIdentity types.Identity
11+
issuerIdentity, err := issuerIdentity.FromPubKey(source.Asset.PublicKey, false)
12+
if err != nil {
13+
return nil, errors.Wrap(err, "failed to get identity for public key")
14+
}
15+
16+
issuedAsset := protobuff.AssetIssuanceData{
17+
IssuerIdentity: issuerIdentity.String(),
18+
Type: uint32(source.Asset.Type),
19+
Name: int8ArrayToString(source.Asset.Name[:]),
20+
NumberOfDecimalPlaces: int32(source.Asset.NumberOfDecimalPlaces),
21+
UnitOfMeasurement: int8ArrayToInt32Array(source.Asset.UnitOfMeasurement[:]),
22+
}
23+
24+
asset := protobuff.AssetIssuance{
25+
Data: &issuedAsset,
26+
Tick: source.Tick,
27+
UniverseIndex: source.UniverseIndex,
28+
}
29+
30+
return &asset, nil
31+
}
32+
33+
func convertAssetOwnership(source types.AssetOwnership) (*protobuff.AssetOwnership, error) {
34+
var owner types.Identity
35+
owner, err := owner.FromPubKey(source.Asset.PublicKey, false)
36+
if err != nil {
37+
return nil, errors.Wrap(err, "failed to get identity for public key")
38+
}
39+
40+
ownedAsset := protobuff.AssetOwnershipData{
41+
OwnerIdentity: owner.String(),
42+
Type: uint32(source.Asset.Type),
43+
ManagingContractIndex: uint32(source.Asset.ManagingContractIndex),
44+
IssuanceIndex: source.Asset.IssuanceIndex,
45+
NumberOfUnits: source.Asset.NumberOfUnits,
46+
}
47+
48+
assetOwnership := protobuff.AssetOwnership{
49+
Data: &ownedAsset,
50+
Tick: source.Tick,
51+
UniverseIndex: source.UniverseIndex,
52+
}
53+
54+
return &assetOwnership, nil
55+
}
56+
57+
func convertAssetPossession(source types.AssetPossession) (*protobuff.AssetPossession, error) {
58+
59+
var possessor types.Identity
60+
possessor, err := possessor.FromPubKey(source.Asset.PublicKey, false)
61+
if err != nil {
62+
return nil, errors.Wrap(err, "failed to get identity for public key")
63+
}
64+
65+
possessedAsset := protobuff.AssetPossessionData{
66+
PossessorIdentity: possessor.String(),
67+
Type: uint32(source.Asset.Type),
68+
ManagingContractIndex: uint32(source.Asset.ManagingContractIndex),
69+
OwnershipIndex: source.Asset.OwnershipIndex,
70+
NumberOfUnits: source.Asset.NumberOfUnits,
71+
}
72+
73+
assetPossession := protobuff.AssetPossession{
74+
Data: &possessedAsset,
75+
Tick: source.Tick,
76+
UniverseIndex: source.UniverseIndex,
77+
}
78+
79+
return &assetPossession, nil
80+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package rpc
2+
3+
import (
4+
"github.com/qubic/go-node-connector/types"
5+
"github.com/qubic/qubic-http/protobuff"
6+
"github.com/stretchr/testify/assert"
7+
"testing"
8+
)
9+
10+
func TestAssetConverter_convertAssetIssuance(t *testing.T) {
11+
12+
source := types.AssetIssuance{
13+
Asset: types.AssetIssuanceData{
14+
PublicKey: [32]byte{},
15+
Type: 1,
16+
Name: [7]int8{82, 65, 78, 68, 79, 77, 0},
17+
NumberOfDecimalPlaces: 0,
18+
UnitOfMeasurement: [7]int8{1, 2, 3, 4, 5, 6, 7},
19+
},
20+
Tick: 42,
21+
UniverseIndex: 43,
22+
}
23+
24+
converted, err := convertAssetIssuance(source)
25+
assert.NoError(t, err)
26+
27+
assert.Equal(t, &protobuff.AssetIssuance{
28+
Data: &protobuff.AssetIssuanceData{
29+
IssuerIdentity: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFXIB",
30+
Type: 1,
31+
Name: "RANDOM",
32+
NumberOfDecimalPlaces: 0,
33+
UnitOfMeasurement: []int32{1, 2, 3, 4, 5, 6, 7},
34+
},
35+
Tick: 42,
36+
UniverseIndex: 43,
37+
}, converted)
38+
39+
}
40+
41+
func TestAssetConverter_convertAssetOwnership(t *testing.T) {
42+
43+
id := types.Identity("TESTIOGXQKYYZEQXOXFSWWAJNYLCDBWFAPNBLNBUZFHDVFMYPJZXGMEEJEGI")
44+
pubKey, err := id.ToPubKey(false)
45+
assert.NoError(t, err)
46+
47+
source := types.AssetOwnership{
48+
Asset: types.AssetOwnershipData{
49+
PublicKey: pubKey,
50+
Type: 2,
51+
Padding: [1]int8{},
52+
ManagingContractIndex: 1,
53+
IssuanceIndex: 123,
54+
NumberOfUnits: 456,
55+
},
56+
Tick: 42,
57+
UniverseIndex: 43,
58+
}
59+
60+
converted, err := convertAssetOwnership(source)
61+
assert.NoError(t, err)
62+
63+
assert.Equal(t, &protobuff.AssetOwnership{
64+
Data: &protobuff.AssetOwnershipData{
65+
OwnerIdentity: "TESTIOGXQKYYZEQXOXFSWWAJNYLCDBWFAPNBLNBUZFHDVFMYPJZXGMEEJEGI",
66+
Type: 2,
67+
ManagingContractIndex: 1,
68+
IssuanceIndex: 123,
69+
NumberOfUnits: 456,
70+
},
71+
Tick: 42,
72+
UniverseIndex: 43,
73+
}, converted)
74+
75+
}
76+
77+
func TestAssetConverter_convertAssetPossession(t *testing.T) {
78+
79+
id := types.Identity("TESTIOGXQKYYZEQXOXFSWWAJNYLCDBWFAPNBLNBUZFHDVFMYPJZXGMEEJEGI")
80+
pubKey, err := id.ToPubKey(false)
81+
assert.NoError(t, err)
82+
83+
source := types.AssetPossession{
84+
Asset: types.AssetPossessionData{
85+
PublicKey: pubKey,
86+
Type: 3,
87+
Padding: [1]int8{},
88+
ManagingContractIndex: 1,
89+
OwnershipIndex: 123,
90+
NumberOfUnits: 456,
91+
},
92+
Tick: 42,
93+
UniverseIndex: 43,
94+
}
95+
96+
converted, err := convertAssetPossession(source)
97+
assert.NoError(t, err)
98+
99+
assert.Equal(t, &protobuff.AssetPossession{
100+
Data: &protobuff.AssetPossessionData{
101+
PossessorIdentity: "TESTIOGXQKYYZEQXOXFSWWAJNYLCDBWFAPNBLNBUZFHDVFMYPJZXGMEEJEGI",
102+
Type: 3,
103+
ManagingContractIndex: 1,
104+
OwnershipIndex: 123,
105+
NumberOfUnits: 456,
106+
},
107+
Tick: 42,
108+
UniverseIndex: 43,
109+
}, converted)
110+
111+
}

0 commit comments

Comments
 (0)