Skip to content

Commit

Permalink
docs: add descriptions for encoding / decoding tuples
Browse files Browse the repository at this point in the history
  • Loading branch information
CJ42 committed Jun 25, 2024
1 parent 8396676 commit db52578
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 31 deletions.
137 changes: 107 additions & 30 deletions docs/methods.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,40 @@ After the `data` is encoded, the object is ready to be stored in smart contracts

#### Examples

<details>
<summary>**Encode** a <code>Singleton</code> data key</summary>

```javascript title="encode a Singleton data key of valueContent Address"
import ERC725 from '@erc725/erc725.js';

const schemas = [
{
name: 'LSP1UniversalReceiverDelegate',
key: '0x0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47',
keyType: 'Singleton',
valueType: 'address',
valueContent: 'Address',
},
];

const myErc725 = new ERC725(schemas);

myErc725.encodeData([
{
keyName: 'LSP1UniversalReceiverDelegate',
value: '0x1183790f29BE3cDfD0A102862fEA1a4a30b3AdAb',
},
]);
/**
{
keys: ['0x0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47'],
values: ['0x1183790f29be3cdfd0a102862fea1a4a30b3adab'],
}
*/
```

</details>

<details>
<summary>Encode a <code>VerifiableURI</code> with JSON and uploaded URL</summary>

Expand Down Expand Up @@ -166,39 +200,10 @@ myErc725.encodeData([
*/
```

```javascript title="encode a Singleton data key of valueContent Address"
import ERC725 from '@erc725/erc725.js';

const schemas = [
{
name: 'LSP1UniversalReceiverDelegate',
key: '0x0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47',
keyType: 'Singleton',
valueType: 'address',
valueContent: 'Address',
},
];

const myErc725 = new ERC725(schemas);

myErc725.encodeData([
{
keyName: 'LSP1UniversalReceiverDelegate',
value: '0x1183790f29BE3cDfD0A102862fEA1a4a30b3AdAb',
},
]);
/**
{
keys: ['0x0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47'],
values: ['0x1183790f29be3cdfd0a102862fea1a4a30b3adab'],
}
*/
```

</details>

<details>
<summary>Encode a <code>VerifiableURI</code> with hash function, hash and uploaded URL</summary>
<summary>**Encode** a <code>VerifiableURI</code> with hash function, hash and uploaded URL</summary>

```javascript title="Encode a VerifiableURI with hash function, hash and uploaded URL"
import ERC725 from '@erc725/erc725.js';
Expand Down Expand Up @@ -463,6 +468,46 @@ myErc725.encodeData(

</details>

<details>
<summary>Encode a tuple for <code>valueType</code> / <code>valueContent</code></summary>

```javascript title="Encode a tuple for valueType / valueContent"
import ERC725 from '@erc725/erc725.js';

const schemas = [
{
name: 'LSP4CreatorsMap:<address>',
key: '0x6de85eaf5d982b4e5da00000<address>',
keyType: 'Mapping',
valueType: '(bytes4,uint128)',
valueContent: '(Bytes4,Number)',
},
];

ERC725.encodeData(
[
{
keyName: 'LSP4CreatorsMap:<address>',
dynamicKeyParts: "0xcafecafecafecafecafecafecafecafecafecafe"
value: ['0x24871b3d', '11'],
},
],
schemas,
);
/**
{
keys: [
'0xdf30dba06db6a30e65354d9a64c609861f089545ca58c6b4dbe31a5f338cb0e3', // -> data key for `LSP4CreatorsMap:0xcafecafecafecafecafecafecafecafecafecafe`
],
values: [
'0x24871b3d0000000000000000000000000000000b', // (bytes4,uint128)
],
}
*/
```

</details>

---

### encodeKeyName
Expand Down Expand Up @@ -888,6 +933,38 @@ myErc725.decodeData(

---

#### Tuple Example

```javascript title="Decode a key with tuple as valueType / valueContent"
import ERC725 from '@erc725/erc725.js';

const schemas = [
{
name: 'LSP4CreatorsMap:<address>',
key: '0x6de85eaf5d982b4e5da00000<address>',
keyType: 'Mapping',
valueType: '(bytes4,uint128)',
valueContent: '(Bytes4,Number)',
},
];

ERC725.decodeData(
{
keyName: 'LSP4CreatorsMap:<address>',
dynamicKeyParts: "0xcafecafecafecafecafecafecafecafecafecafe"
value: "0x24871b3d0000000000000000000000000000000b",
},
schemas,
);
/**
{
key: '0x6de85eaf5d982b4e5da00000cafecafecafecafecafecafecafecafecafecafe',
name: 'LSP4CreatorsMap:cafecafecafecafecafecafecafecafecafecafe',
value: ['0x24871b3d', 11]
}
*/
```

### decodeValueType

```js
Expand Down
11 changes: 10 additions & 1 deletion src/lib/decodeData.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,13 @@ describe('decodeData', () => {
valueType: 'bytes',
valueContent: 'VerifiableURI',
},
{
name: 'LSP4CreatorsMap:<address>',
key: '0x6de85eaf5d982b4e5da00000<address>',
keyType: 'Mapping',
valueType: '(bytes4,uint128)',
valueContent: '(Bytes4,Number)',
},
];

it('decodes each key', () => {
Expand Down Expand Up @@ -164,7 +171,7 @@ describe('decodeData', () => {
expect(decodedData.name).to.eql('KeyOne');
});

it('parses type tuples/Mixed correctly', () => {
it.only('parses type tuples/Mixed correctly', () => {
const schema: ERC725JSONSchema = {
name: 'MyDynamicKey:<address>',
key: '0x',
Expand All @@ -185,6 +192,8 @@ describe('decodeData', () => {
[schema],
);

console.log('decodedData for tuple: ', decodedData);

expect(decodedData.value).to.eql(['0x11223344', 12]);
});

Expand Down

0 comments on commit db52578

Please sign in to comment.