Skip to content

Commit

Permalink
Onboarding: Fix tinlake pool agreement signing (#1499)
Browse files Browse the repository at this point in the history
* Fix bug that prevents tinlake subdoc signing

* Fix inconsistency
  • Loading branch information
sophialittlejohn authored Jul 13, 2023
1 parent 94ad603 commit a79df28
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 deletions.
4 changes: 2 additions & 2 deletions onboarding-api/src/controllers/emails/signAndSendDocuments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@ export const signAndSendDocumentsController = async (
const { metadata } = await getPoolById(poolId)
if (
investorType === 'individual' &&
metadata?.onboarding?.kycRestrictedCountries.includes(user.countryOfCitizenship)
metadata?.onboarding?.kycRestrictedCountries?.includes(user.countryOfCitizenship)
) {
throw new HttpError(400, 'Country not supported by issuer')
}

if (
investorType === 'entity' &&
metadata?.onboarding?.kybRestrictedCountries.includes((user as EntityUser).jurisdictionCode!)
metadata?.onboarding?.kybRestrictedCountries?.includes((user as EntityUser).jurisdictionCode!)
) {
throw new HttpError(400, 'Country not supported by issuer')
}
Expand Down
38 changes: 20 additions & 18 deletions onboarding-api/src/utils/tinlake.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,6 @@ interface ActivePool extends BasePool {
}
}

const EVM_NETWORK = process.env.EVM_NETWORK || 'mainnet'
const INFURA_KEY = process.env.INFURA_KEY

const goerliConfig = {
remarkerAddress: '0x6E395641087a4938861d7ada05411e3146175F58',
poolsHash: 'QmQe9NTiVJnVcb4srw6sBpHefhYieubR7v3J8ZriULQ8vB', // TODO: add registry to config and fetch poolHash
Expand All @@ -110,23 +107,23 @@ const mainnetConfig = {
memberListAddress: '0xB7e70B77f6386Ffa5F55DDCb53D87A0Fb5a2f53b',
}

export const ethConfig = {
network: EVM_NETWORK,
export const getEthConfig = () => ({
network: process.env.EVM_NETWORK,
multicallContractAddress: '0x5ba1e12693dc8f9c48aad8770482f4739beed696', // Same for all networks
signerPrivateKey: process.env.EVM_MEMBERLIST_ADMIN_PRIVATE_KEY,
...(EVM_NETWORK === 'goerli' ? goerliConfig : mainnetConfig),
}
...(process.env.EVM_NETWORK === 'goerli' ? goerliConfig : mainnetConfig),
})

function parsePoolsMetadata(poolsMetadata): { active: ActivePool[] } {
const launching = poolsMetadata.filter((p): p is LaunchingPool => !!p.metadata.isLaunching)
const launching = poolsMetadata.filter((p): p is LaunchingPool => !!p.metadata?.isLaunching)
const active = poolsMetadata.filter(
(p): p is ActivePool => !!('addresses' in p && p.addresses.ROOT_CONTRACT && !launching.includes(p))
(p): p is ActivePool => !!('addresses' in p && p.addresses.ROOT_CONTRACT && !launching?.includes(p))
)
return { active }
}

export const getTinlakePoolById = async (poolId: string) => {
const uri = ethConfig.poolsHash
const uri = getEthConfig().poolsHash
const data = (await lastValueFrom(getCentrifuge().metadata.getMetadata(uri))) as PoolMetadataDetails
const pools = parsePoolsMetadata(Object.values(data))
const poolData = pools.active.find((p) => p.addresses.ROOT_CONTRACT === poolId)
Expand All @@ -150,14 +147,18 @@ export const getTinlakePoolById = async (poolId: string) => {
},
},
onboarding: {
agreements: {
tranches: {
[`${id}-0`]: {
uri: poolData.metadata.attributes?.Links.Agreements?.[`${id}-0`],
mime: 'application/pdf',
agreement: {
uri: poolData.metadata.attributes?.Links.Agreements?.[`${id}-0`],
mime: 'application/pdf',
},
},
[`${id}-1`]: {
uri: poolData.metadata.attributes?.Links.Agreements?.[`${id}-1`],
mime: 'application/pdf',
agreement: {
uri: poolData.metadata.attributes?.Links.Agreements?.[`${id}-1`],
mime: 'application/pdf',
},
},
},
},
Expand Down Expand Up @@ -192,8 +193,8 @@ export const validateEvmRemark = async (
transactionInfo: InferType<typeof signAndSendDocumentsInput>['transactionInfo'],
expectedRemark: string
) => {
const provider = new InfuraProvider(EVM_NETWORK, INFURA_KEY)
const contract = new Contract(ethConfig.remarkerAddress, RemarkerAbi).connect(provider)
const provider = new InfuraProvider(process.env.EVM_NETWORK, process.env.INFURA_KEY)
const contract = new Contract(getEthConfig().remarkerAddress, RemarkerAbi).connect(provider)
const filteredEvents = await contract.queryFilter(
'Remarked',
Number(transactionInfo.blockNumber),
Expand All @@ -213,7 +214,8 @@ export const addTinlakeInvestorToMemberList = async (
) => {
try {
const pool = await getTinlakePoolById(poolId)
const provider = new InfuraProvider(EVM_NETWORK, INFURA_KEY)
const provider = new InfuraProvider(process.env.EVM_NETWORK, process.env.INFURA_KEY)
const ethConfig = getEthConfig()
const signer = new Wallet(ethConfig.signerPrivateKey).connect(provider)
const memberAdminContract = new Contract(ethConfig.memberListAddress, MemberListAdminAbi, signer)
const memberlistAddress = trancheId.endsWith('1')
Expand Down

0 comments on commit a79df28

Please sign in to comment.