Skip to content
This repository has been archived by the owner on Apr 7, 2021. It is now read-only.

Commit

Permalink
Merge pull request #9 from microcrontop/remove_events
Browse files Browse the repository at this point in the history
Remove events
  • Loading branch information
iamsecretsanta committed Jan 26, 2021
2 parents 92aaab1 + 621e6ac commit 198e24d
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 40 deletions.
5 changes: 4 additions & 1 deletion src/components/ConfirmTransferModal/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export default function ConfirmTransferModal({
tokenTransferState,
}: ConfirmTransferProps) {

const {crosschainTransferStatus} = useCrosschainState()
const {crosschainTransferStatus, swapDetails, depositConfirmed} = useCrosschainState()
useEffect(()=>{
if(crosschainTransferStatus === ChainTransferState.ApprovalComplete){
changeTransferState(ChainTransferState.ApprovalComplete)
Expand Down Expand Up @@ -91,6 +91,9 @@ export default function ConfirmTransferModal({
<CloseIcon onClick={onDismiss} />
</RowBetween>
<h5>{title}</h5>
<span>swapDetails status {swapDetails.status}</span>
<span>swapDetails voteCount {String(swapDetails.voteCount)}</span>
<span>depositConfirmed {depositConfirmed?"true":"false"}</span>

{tokenTransferState === ChainTransferState.NotStarted &&
<NotStarted
Expand Down
17 changes: 12 additions & 5 deletions src/state/crosschain/actions.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { createAction } from '@reduxjs/toolkit'

export enum ProposalStatus {
INACTIVE = 0,
ACTIVE,
PASSED,
EXECUTED,
CANCELLED,
INACTIVE = "0",
ACTIVE = "1",
PASSED = "2",
EXECUTED = "3",
CANCELLED = "4",
}

export interface CrosschainToken {
Expand All @@ -31,6 +31,11 @@ export enum ChainTransferState {
TransferComplete = 'TRANSFER_COMPLETE'
}

export interface SwapDetails {
status: ProposalStatus,
voteCount: number
}

export const setCrosschainRecipient = createAction<{ address: string }>('crosschain/set-recipient')
export const setCurrentTxID = createAction<{ txID: string }>('crosschain/set-currentTxID')
export const setAvailableChains = createAction<{ chains: Array<CrosschainChain> }>('crosschain/set-availableChains')
Expand All @@ -43,3 +48,5 @@ export const setCurrentTokenBalance = createAction<{ balance: string }>('crossch
export const setTransferAmount = createAction<{ amount: string }>('crosschain/set-transfer-amount')
export const setCrosschainFee = createAction<{ value: string }>('crosschain/set-fee')
export const setCrosschainTransferStatus = createAction<{ status: ChainTransferState }>('crosschain/set-transfer-status')
export const setCrosschainDepositConfirmed = createAction<{ confirmed: boolean }>('crosschain/set-deposit-confirmed')
export const setCrosschainSwapDetails = createAction<{ details: SwapDetails }>('crosschain/set-swap-details')
85 changes: 52 additions & 33 deletions src/state/crosschain/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ import {
CrosschainToken,
ProposalStatus,
setAvailableChains,
setAvailableTokens,
setAvailableTokens, setCrosschainDepositConfirmed,
setCrosschainFee,
setCrosschainRecipient,
setCrosschainSwapDetails,
setCrosschainTransferStatus,
setCurrentChain,
setCurrentToken,
setCurrentTokenBalance,
setCurrentTxID,
setTargetChain,
setTargetTokens,
setTransferAmount
setTransferAmount, SwapDetails
} from './actions'
import store, { AppDispatch, AppState } from '../index'
import { useCallback, useEffect } from 'react'
Expand All @@ -25,16 +26,23 @@ import { useDispatch, useSelector } from 'react-redux'
import { ChainId } from '@zeroexchange/sdk'
import { initialState } from './reducer'
import { useActiveWeb3React } from '../../hooks'
import Web3 from 'web3'
import { Bridge } from '@chainsafe/chainbridge-contracts/dist/ethers/Bridge'

const BridgeABI = require('../../constants/abis/Bridge.json').abi
const TokenABI = require('../../constants/abis/ERC20PresetMinterPauser.json').abi

var dispatch: AppDispatch
var web3React: any

function delay(ms: number) {
return new Promise( resolve => setTimeout(resolve, ms) );
}

export function useCrosschainState(): AppState['crosschain'] {
return useSelector<AppState, AppState['crosschain']>(state => state.crosschain)
}

function getCrosschainState(): AppState['crosschain'] {
return store.getState().crosschain || initialState
}
Expand Down Expand Up @@ -140,7 +148,7 @@ function GetAvailableTokens(chainName: string): Array<CrosschainToken> {
imageUri: token.imageUri,
resourceId: token.resourceId,
isNativeWrappedToken: token.isNativeWrappedToken,
assetBase: token.assetBase,
assetBase: token.assetBase
}
result.push(t)
})
Expand Down Expand Up @@ -171,6 +179,17 @@ export function useCrosschainHooks() {
dispatch(setCrosschainTransferStatus({
status: ChainTransferState.NotStarted
}))

dispatch(setCrosschainSwapDetails({
details: {
status: ProposalStatus.INACTIVE,
voteCount: 0
}
}))

dispatch(setCrosschainDepositConfirmed({
confirmed: false
}))
}

const MakeDeposit = async () => {
Expand All @@ -187,18 +206,6 @@ export function useCrosschainHooks() {
const signer = web3React.library.getSigner()
const bridgeContract = new ethers.Contract(currentChain.bridgeAddress, BridgeABI, signer)

let nonce = '-1'
bridgeContract.once(
bridgeContract.filters.Deposit(
targetChain.chainId,
currentToken.resourceId,
null
),
(_, __, depositNonce) => {
nonce = `${depositNonce.toString()}`
}
)

const data =
'0x' +
utils
Expand All @@ -223,7 +230,16 @@ export function useCrosschainHooks() {
return
}

await resultDepositTx.wait(2) // need more than one because we catch event on first confirmation
await resultDepositTx.wait(1)

dispatch(setCrosschainDepositConfirmed({
confirmed: true
}))

const web3CurrentChain = new Web3(currentChain.rpcUrl)
const receipt = await web3CurrentChain.eth.getTransactionReceipt(resultDepositTx.hash)

let nonce = receipt.logs[2].topics[3]

dispatch(setCurrentTxID({
txID: resultDepositTx.hash
Expand All @@ -235,25 +251,28 @@ export function useCrosschainHooks() {
UpdateOwnTokenBalance().catch(console.error)

{
const destinationBridge = new ethers.Contract(targetChain.bridgeAddress, BridgeABI, new ethers.providers.JsonRpcProvider(targetChain.rpcUrl))
destinationBridge.on(
destinationBridge.filters.ProposalEvent(
currentChain.chainId,
BigNumber.from(nonce),
null,
null,
null
),
(originChainId, depositNonce, status, resourceId, dataHash, tx) => {
console.log("ProposalEvent status", status)
let crosschainState = getCrosschainState()
if (status == ProposalStatus.EXECUTED && crosschainState.currentTxID === resultDepositTx.hash) {
while (true) {
try {
await delay(5000);
const web3TargetChain = new Web3(targetChain.rpcUrl)
const destinationBridge = new web3TargetChain.eth.Contract(BridgeABI, targetChain.bridgeAddress)
const proposal = await destinationBridge.methods.getProposal(currentChain.chainId, nonce,web3TargetChain.utils.keccak256(targetChain.erc20HandlerAddress + data.slice(2))).call().catch()
dispatch(setCrosschainSwapDetails({
details: {
status: proposal._status,
voteCount: !!proposal?._yesVotes ? proposal._yesVotes.length : 0
}
}))
if (proposal && proposal._status == ProposalStatus.EXECUTED) {
dispatch(setCrosschainTransferStatus({
status: ChainTransferState.TransferComplete
}))
break
}
}catch (e) {
console.error(e)
}
)
}
}
}

Expand Down Expand Up @@ -284,7 +303,7 @@ export function useCrosschainHooks() {
txID: resultApproveTx.hash
}))

resultApproveTx.wait(2).then(() => {
resultApproveTx.wait(1).then(() => {
let crosschainState = getCrosschainState()
if (crosschainState.currentTxID === resultApproveTx.hash) {
dispatch(setCurrentTxID({
Expand Down Expand Up @@ -355,7 +374,7 @@ export function useCrossChain() {
const { account, library } = useActiveWeb3React()
const chainIdFromWeb3React = useActiveWeb3React().chainId

const chainId = library ?._network ?.chainId || chainIdFromWeb3React
const chainId = library?._network?.chainId || chainIdFromWeb3React

const initAll = () => {
const {
Expand Down Expand Up @@ -384,7 +403,7 @@ export function useCrossChain() {
}

const tokens = GetAvailableTokens(currentChainName)
const targetTokens = GetAvailableTokens(newTargetCain ?.name)
const targetTokens = GetAvailableTokens(newTargetCain?.name)
dispatch(setAvailableTokens({
tokens: tokens.length ? tokens : []
}))
Expand Down
26 changes: 25 additions & 1 deletion src/state/crosschain/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@ import {
ChainTransferState,
CrosschainChain,
CrosschainToken,
ProposalStatus,
setAvailableChains,
setAvailableTokens,
setCrosschainDepositConfirmed,
setCrosschainFee,
setCrosschainRecipient,
setCrosschainSwapDetails,
setCrosschainTransferStatus,
setCurrentChain,
setCurrentToken,
setCurrentTokenBalance,
setCurrentTxID,
setTargetChain,
setTargetTokens,
setTransferAmount,
setTransferAmount, SwapDetails
} from './actions'
import { createAction, createReducer } from '@reduxjs/toolkit'

Expand All @@ -30,6 +33,8 @@ export interface CrosschainState {
readonly transferAmount: string
readonly crosschainFee: string
readonly crosschainTransferStatus: ChainTransferState
readonly swapDetails: SwapDetails
readonly depositConfirmed: boolean
}

export const initialState: CrosschainState = {
Expand All @@ -54,6 +59,11 @@ export const initialState: CrosschainState = {
transferAmount: '',
crosschainFee: '',
crosschainTransferStatus: ChainTransferState.NotStarted,
swapDetails: {
status: ProposalStatus.INACTIVE,
voteCount: 0
},
depositConfirmed: false
}

export default createReducer<CrosschainState>(initialState, builder =>
Expand Down Expand Up @@ -143,4 +153,18 @@ export default createReducer<CrosschainState>(initialState, builder =>
crosschainTransferStatus: status
}
})
.addCase(setCrosschainSwapDetails, (state, { payload: { details } }) => {
const currentState = { ...initialState, ...state };
return {
...currentState,
swapDetails: details
}
})
.addCase(setCrosschainDepositConfirmed, (state, { payload: { confirmed } }) => {
const currentState = { ...initialState, ...state };
return {
...currentState,
depositConfirmed: confirmed
}
})
)

0 comments on commit 198e24d

Please sign in to comment.