Skip to content

Commit

Permalink
Implement all Tezos transactions
Browse files Browse the repository at this point in the history
  • Loading branch information
maxima-net committed Sep 5, 2022
1 parent ae213fe commit 574acd9
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { BigNumber } from 'bignumber.js';

export interface AtomexProtocolMultiChainInitiateParameters {
readonly senderAddress: string;
readonly amount: BigNumber;
readonly secretHash: string;
readonly receivingAddress: string;
Expand Down
3 changes: 2 additions & 1 deletion src/blockchain/atomexProtocolMultiChain/redeemParameters.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export interface AtomexProtocolMultiChainRedeemParameters {
readonly secretHash: string;
readonly senderAddress: string;
readonly secret: string;
}
3 changes: 2 additions & 1 deletion src/blockchain/atomexProtocolMultiChain/refundParameters.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export interface AtomexProtocolMultiChainRefundParameters {
readonly secretHash: string;
readonly senderAddress: string;
readonly secret: string;
}
21 changes: 20 additions & 1 deletion src/tezos/atomexProtocol/taquitoAtomexProtocolMultiChain.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { TezosToolkit } from '@taquito/taquito';
import type { TezosToolkit, TransactionWalletOperation } from '@taquito/taquito';
import BigNumber from 'bignumber.js';

import type {
Expand Down Expand Up @@ -77,4 +77,23 @@ export abstract class TaquitoAtomexProtocolMultiChain implements AtomexProtocolM

return taquitoWallet;
}

protected async getTransaction(operation: TransactionWalletOperation): Promise<Transaction> {
const status = await operation.status();
const confirmation = await operation.confirmation();

//TODO: fill others fields
return {
id: operation.opHash,
currencyId: this.currencyId,
confirmations: confirmation.currentConfirmation,
status,
blockId: 0,
type: ''
};
}

protected formatDate(date: Date): string {
return date.toISOString().slice(0, -5) + 'Z';
}
}
42 changes: 35 additions & 7 deletions src/tezos/atomexProtocol/tezosTaquitoAtomexProtocolMultiChain.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { Wallet } from '@taquito/taquito';

import { atomexProtocolMultiChainHelper } from '../../blockchain/atomexProtocolMultiChain';
import type {
AtomexBlockchainProvider,
Expand All @@ -9,7 +11,8 @@ import type {
import type { AtomexNetwork } from '../../common/index';
import type { DeepReadonly } from '../../core/index';
import type { PriceManager } from '../../exchange';
import type { TezosTaquitoAtomexProtocolMultiChainOptions } from '../models/index';
import type { TezosMultiChainSmartContract, TezosTaquitoAtomexProtocolMultiChainOptions } from '../models/index';
import { mutezInTez } from '../utils';
import { TaquitoAtomexProtocolMultiChain } from './taquitoAtomexProtocolMultiChain';

export class TezosTaquitoAtomexProtocolMultiChain extends TaquitoAtomexProtocolMultiChain {
Expand All @@ -27,16 +30,31 @@ export class TezosTaquitoAtomexProtocolMultiChain extends TaquitoAtomexProtocolM
return this.atomexProtocolOptions.currencyId;
}

initiate(_params: AtomexProtocolMultiChainInitiateParameters): Promise<Transaction> {
throw new Error('Method not implemented.');
async initiate(params: AtomexProtocolMultiChainInitiateParameters): Promise<Transaction> {
const contract = await this.getSwapContract(params.senderAddress);
const operation = await contract.methodsObject
.initiate({
settings: {
hashed_secret: params.secretHash,
refund_time: this.formatDate(params.refundTimestamp),
payoff: params.rewardForRedeem.multipliedBy(mutezInTez).toNumber(),
},
participant: params.receivingAddress,
})
.send({ amount: params.amount.toNumber() });

return this.getTransaction(operation);
}

getInitiateFees(params: Partial<AtomexProtocolMultiChainInitiateParameters>): Promise<FeesInfo> {
return super.getInitiateFees(params);
}

redeem(_params: AtomexProtocolMultiChainRedeemParameters): Promise<Transaction> {
throw new Error('Method not implemented.');
async redeem(params: AtomexProtocolMultiChainRedeemParameters): Promise<Transaction> {
const contract = await this.getSwapContract(params.senderAddress);
const operation = await contract.methodsObject.redeem(params.secret).send();

return this.getTransaction(operation);
}

getRedeemReward(redeemFee: FeesInfo): Promise<FeesInfo> {
Expand All @@ -47,11 +65,21 @@ export class TezosTaquitoAtomexProtocolMultiChain extends TaquitoAtomexProtocolM
return super.getRedeemFees(params);
}

refund(_params: AtomexProtocolMultiChainRefundParameters): Promise<Transaction> {
throw new Error('Method not implemented.');
async refund(params: AtomexProtocolMultiChainRefundParameters): Promise<Transaction> {
const contract = await this.getSwapContract(params.senderAddress);
const operation = await contract.methodsObject.refund(params.secret).send();

return this.getTransaction(operation);
}

getRefundFees(params: Partial<AtomexProtocolMultiChainInitiateParameters>): Promise<FeesInfo> {
return super.getRefundFees(params);
}

protected async getSwapContract(address: string): Promise<TezosMultiChainSmartContract<Wallet>> {
const wallet = await this.getWallet(address);
const contract = await wallet.toolkit.wallet.at<TezosMultiChainSmartContract<Wallet>>(this.swapContractAddress);

return contract;
}
}
1 change: 0 additions & 1 deletion src/tezos/config/defaultOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ const createAtomexProtocol = (
default:
throw new Error(`Unknown Tezos currency: ${(currency as TezosCurrency).id}`);
}

};

const createCurrencyOptions = (
Expand Down
17 changes: 17 additions & 0 deletions src/tezos/models/contracts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import type { ContractAbstraction, ContractMethod, ContractProvider, Wallet } from '@taquito/taquito';

export type TezosMultiChainSmartContract<T extends ContractProvider | Wallet = ContractProvider> = ContractAbstraction<T> & {
methodsObject: {
initiate(args: {
settings: {
hashed_secret: string;
refund_time: string;
payoff: number;
},
participant: string;
}): ContractMethod<T>;

redeem(secret: string): ContractMethod<T>;
refund(secret: string): ContractMethod<T>;
}
};
1 change: 1 addition & 0 deletions src/tezos/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ export type {
TaquitoAtomexProtocolMultiChainOptions, TezosTaquitoAtomexProtocolMultiChainOptions,
FA12TezosTaquitoAtomexProtocolMultiChainOptions, FA2TezosTaquitoAtomexProtocolMultiChainOptions
} from './atomexProtocolOptions';
export type { TezosMultiChainSmartContract } from './contracts';

0 comments on commit 574acd9

Please sign in to comment.