Skip to content

Commit

Permalink
feat: integrate filecoin family (#127)
Browse files Browse the repository at this point in the history
  • Loading branch information
cksanders committed Mar 24, 2023
1 parent a4912ba commit 67deb45
Show file tree
Hide file tree
Showing 25 changed files with 318 additions and 55 deletions.
1 change: 1 addition & 0 deletions packages/core/src/families/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export const FAMILIES = [
"ripple",
"cosmos",
"hedera",
"filecoin",
"tezos",
"polkadot",
"stellar",
Expand Down
58 changes: 58 additions & 0 deletions packages/core/src/families/filecoin/serializer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import BigNumber from "bignumber.js";
import type { FilecoinTransaction, RawFilecoinTransaction } from "./types";

export function serializeFilecoinTransaction({
amount,
data = undefined,
family,
method,
nonce,
params = undefined,
gasLimit,
gasFeeCap,
gasPremium,
recipient,
version,
}: FilecoinTransaction): RawFilecoinTransaction {
return {
amount: amount.toString(),
data: data ? data.toString("hex") : undefined,
family,
gasLimit: gasLimit.toNumber(),
gasFeeCap: gasFeeCap.toString(),
gasPremium: gasPremium.toString(),
method,
nonce,
params,
recipient,
version,
};
}

export function deserializeFilecoinTransaction({
amount,
data = undefined,
family,
method,
nonce,
params = undefined,
gasLimit,
gasFeeCap,
gasPremium,
recipient,
version,
}: RawFilecoinTransaction): FilecoinTransaction {
return {
amount: new BigNumber(amount),
data: data ? Buffer.from(data, "hex") : undefined,
family,
gasLimit: new BigNumber(gasLimit),
gasFeeCap: new BigNumber(gasFeeCap),
gasPremium: new BigNumber(gasPremium),
nonce,
method,
params,
recipient,
version,
};
}
20 changes: 20 additions & 0 deletions packages/core/src/families/filecoin/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type BigNumber from "bignumber.js";
import type { z } from "zod";
import type { TransactionCommon } from "../index";
import type { schemaRawFilecoinTransaction } from "./validation";

export interface FilecoinTransaction extends TransactionCommon {
readonly family: RawFilecoinTransaction["family"];
nonce: number;
data?: Buffer;
method: number;
version: number;
params?: string;
gasLimit: BigNumber;
gasFeeCap: BigNumber;
gasPremium: BigNumber;
}

export type RawFilecoinTransaction = z.infer<
typeof schemaRawFilecoinTransaction
>;
14 changes: 14 additions & 0 deletions packages/core/src/families/filecoin/validation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { z } from "zod";
import { schemaFamilies, schemaTransactionCommon } from "../common";

export const schemaRawFilecoinTransaction = schemaTransactionCommon.extend({
data: z.string().optional(),
family: z.literal(schemaFamilies.enum.filecoin),
gasLimit: z.number(),
gasFeeCap: z.string(),
gasPremium: z.string(),
method: z.number(),
nonce: z.number(),
params: z.string().optional(),
version: z.number(),
});
1 change: 1 addition & 0 deletions packages/core/src/families/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export * from "./cosmos/types";
export * from "./crypto_org/types";
export * from "./ethereum/types";
export * from "./hedera/types";
export * from "./filecoin/types";
export * from "./polkadot/types";
export * from "./ripple/types";
export * from "./stellar/types";
Expand Down
8 changes: 8 additions & 0 deletions packages/core/src/families/serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ import {
deserializeHederaTransaction,
serializeHederaTransaction,
} from "./hedera/serializer";
import {
deserializeFilecoinTransaction,
serializeFilecoinTransaction,
} from "./filecoin/serializer";
import {
deserializePolkadotTransaction,
serializePolkadotTransaction,
Expand Down Expand Up @@ -68,6 +72,8 @@ export function serializeTransaction(transaction: Transaction): RawTransaction {
return serializeCosmosTransaction(transaction);
case "hedera":
return serializeHederaTransaction(transaction);
case "filecoin":
return serializeFilecoinTransaction(transaction);
case "tezos":
return serializeTezosTransaction(transaction);
case "polkadot":
Expand Down Expand Up @@ -109,6 +115,8 @@ export function deserializeTransaction(
return deserializeCosmosTransaction(rawTransaction);
case "hedera":
return deserializeHederaTransaction(rawTransaction);
case "filecoin":
return deserializeFilecoinTransaction(rawTransaction);
case "tezos":
return deserializeTezosTransaction(rawTransaction);
case "polkadot":
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/families/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import type { CosmosTransaction } from "./cosmos/types";
import type { CryptoOrgTransaction } from "./crypto_org/types";
import type { EthereumTransaction } from "./ethereum/types";
import type { HederaTransaction } from "./hedera/types";
import type { FilecoinTransaction } from "./filecoin/types";
import type { PolkadotTransaction } from "./polkadot/types";
import type { RippleTransaction } from "./ripple/types";
import type { StellarTransaction } from "./stellar/types";
Expand Down Expand Up @@ -60,6 +61,7 @@ export type Transaction =
| AlgorandTransaction
| CryptoOrgTransaction
| HederaTransaction
| FilecoinTransaction
| RippleTransaction
| CosmosTransaction
| TezosTransaction
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/families/validation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { schemaRawStellarTransaction } from "./stellar/validation";
import { schemaRawTezosTransaction } from "./tezos/validation";
import { schemaRawTronTransaction } from "./tron/validation";
import { schemaRawHederaTransaction } from "./hedera/validation";
import { schemaRawFilecoinTransaction } from "./filecoin/validation";

export const schemaRawTransaction = z.discriminatedUnion("family", [
schemaRawAlgorandTransaction,
Expand All @@ -18,6 +19,7 @@ export const schemaRawTransaction = z.discriminatedUnion("family", [
schemaRawCryptoOrgTransaction,
schemaRawEthereumTransaction,
schemaRawHederaTransaction,
schemaRawFilecoinTransaction,
schemaRawPolkadotTransaction,
schemaRawRippleTransaction,
schemaRawStellarTransaction,
Expand Down
59 changes: 35 additions & 24 deletions website/docs/reference/api/client/index.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx cor

#### Defined in

packages/core/lib/families/types.d.ts:38
packages/core/lib/families/types.d.ts:39

___

Expand Down Expand Up @@ -101,4 +101,4 @@ The address of the transaction's recipient

#### Defined in

packages/core/lib/families/types.d.ts:42
packages/core/lib/families/types.d.ts:43
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx cor

#### Defined in

packages/core/lib/families/types.d.ts:38
packages/core/lib/families/types.d.ts:39

___

Expand Down Expand Up @@ -81,4 +81,4 @@ The address of the transaction's recipient

#### Defined in

packages/core/lib/families/types.d.ts:42
packages/core/lib/families/types.d.ts:43
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx cor

#### Defined in

packages/core/lib/families/types.d.ts:38
packages/core/lib/families/types.d.ts:39

___

Expand Down Expand Up @@ -101,4 +101,4 @@ The address of the transaction's recipient

#### Defined in

packages/core/lib/families/types.d.ts:42
packages/core/lib/families/types.d.ts:43
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx cor

#### Defined in

packages/core/lib/families/types.d.ts:38
packages/core/lib/families/types.d.ts:39

___

Expand Down Expand Up @@ -81,4 +81,4 @@ The address of the transaction's recipient

#### Defined in

packages/core/lib/families/types.d.ts:42
packages/core/lib/families/types.d.ts:43
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx cor

#### Defined in

packages/core/lib/families/types.d.ts:38
packages/core/lib/families/types.d.ts:39

___

Expand Down Expand Up @@ -101,4 +101,4 @@ The address of the transaction's recipient

#### Defined in

packages/core/lib/families/types.d.ts:42
packages/core/lib/families/types.d.ts:43
144 changes: 144 additions & 0 deletions website/docs/reference/api/client/interfaces/FilecoinTransaction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
---
id: "FilecoinTransaction"
title: "Interface: FilecoinTransaction"
sidebar_label: "FilecoinTransaction"
sidebar_position: 0
custom_edit_url: null
---

Common fields for all cryptocurrency transactions

## Hierarchy

- [`TransactionCommon`](TransactionCommon.md)

**`FilecoinTransaction`**

## Properties

### amount

**amount**: `BigNumber`

The amount of token to send in the transaction, denoted in the smallest cryptocurrency's magnitude
For example in BTC, a tx with an 'amount' field of 1 will correspond to a tx corresponding to 0.00000001 BTC

#### Inherited from

[TransactionCommon](TransactionCommon.md).[amount](TransactionCommon.md#amount)

#### Defined in

packages/core/lib/families/types.d.ts:39

___

### data

`Optional` **data**: `Buffer`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:9

___

### family

`Readonly` **family**: ``"filecoin"``

The family of the transaction

#### Overrides

[TransactionCommon](TransactionCommon.md).[family](TransactionCommon.md#family)

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:7

___

### gasFeeCap

**gasFeeCap**: `BigNumber`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:14

___

### gasLimit

**gasLimit**: `BigNumber`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:13

___

### gasPremium

**gasPremium**: `BigNumber`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:15

___

### method

**method**: `number`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:10

___

### nonce

**nonce**: `number`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:8

___

### params

`Optional` **params**: `string`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:12

___

### recipient

**recipient**: `string`

The address of the transaction's recipient

#### Inherited from

[TransactionCommon](TransactionCommon.md).[recipient](TransactionCommon.md#recipient)

#### Defined in

packages/core/lib/families/types.d.ts:43

___

### version

**version**: `number`

#### Defined in

packages/core/lib/families/filecoin/types.d.ts:11

1 comment on commit 67deb45

@vercel
Copy link

@vercel vercel bot commented on 67deb45 Mar 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

wallet-api-wallet-api-tools – ./apps/wallet-api-tools

wallet-api-wallet-api-tools.vercel.app
wallet-api-wallet-api-tools-ledgerhq.vercel.app
wallet-api-wallet-api-tools-git-main-ledgerhq.vercel.app

Please sign in to comment.