diff --git a/schema.graphql b/schema.graphql index 81ca1d2..1ed34c0 100644 --- a/schema.graphql +++ b/schema.graphql @@ -12,7 +12,7 @@ type NetUserBalance @entity { balance: BigInt! # balance } -type TokenIdCondition @entity { +type TokenIdCondition @entity(immutable: true) { id: String! # tokenId condition: Condition! # conditionId complement: String! # complementary tokenId diff --git a/src/ctf.ts b/src/ctf.ts index e1b41e0..719f7ad 100644 --- a/src/ctf.ts +++ b/src/ctf.ts @@ -58,12 +58,6 @@ export function handleConditionPreparation(event: ConditionPreparation): void { entityOne.save(); entityTwo.save(); - - // log.info(`registered entities with condition {} and positionIds {} and {}`, [ - // conditionId.toHexString(), - // positions[0].toString(), - // positions[1].toString(), - // ]); } export function handleConditionResolution(event: ConditionResolution): void { @@ -87,33 +81,37 @@ export function handleConditionResolution(event: ConditionResolution): void { condition.save(); } +// Accepts the already-loaded UserBalance for the current token to avoid +// redundant store.get calls. Only loads the complement balance. function _setNetPosition( user: Address, condition: string, - tokenOne: string, - tokenTwo: string + currentTokenId: string, + complementTokenId: string, + currentTokenBalance: UserBalance | null ): void { let positiveBalanceAsset: string; let positiveBalanceAmount: BigInt; - let tokenOneBalance = UserBalance.load(user.toHexString() + "-" + tokenOne); - let tokenTwoBalance = UserBalance.load(user.toHexString() + "-" + tokenTwo); - - if (tokenOneBalance == null) { - positiveBalanceAsset = tokenTwo; - positiveBalanceAmount = tokenTwoBalance!.balance; - } else if (tokenTwoBalance == null) { - positiveBalanceAsset = tokenOne; - positiveBalanceAmount = tokenOneBalance!.balance; + let complementBalance = UserBalance.load( + user.toHexString() + "-" + complementTokenId + ); + + if (currentTokenBalance == null) { + positiveBalanceAsset = complementTokenId; + positiveBalanceAmount = complementBalance!.balance; + } else if (complementBalance == null) { + positiveBalanceAsset = currentTokenId; + positiveBalanceAmount = currentTokenBalance!.balance; } else { - if (tokenOneBalance!.balance > tokenTwoBalance!.balance) { - positiveBalanceAsset = tokenOne; - positiveBalanceAmount = tokenOneBalance!.balance.minus( - tokenTwoBalance!.balance + if (currentTokenBalance!.balance > complementBalance!.balance) { + positiveBalanceAsset = currentTokenId; + positiveBalanceAmount = currentTokenBalance!.balance.minus( + complementBalance!.balance ); } else { - positiveBalanceAsset = tokenTwo; - positiveBalanceAmount = tokenTwoBalance!.balance.minus( - tokenOneBalance!.balance + positiveBalanceAsset = complementTokenId; + positiveBalanceAmount = complementBalance!.balance.minus( + currentTokenBalance!.balance ); } } @@ -154,7 +152,8 @@ function _adjustSenderBalance( sender, tokenCondition.condition, tokenCondition.id, - tokenCondition.complement + tokenCondition.complement, + senderBalance ); } } @@ -188,7 +187,8 @@ function _adjustReceiverBalance( receiver, tokenCondition.condition, tokenCondition.id, - tokenCondition.complement + tokenCondition.complement, + receiverBalance ); } }