cleaning up still

This commit is contained in:
stubbsta 2025-06-13 11:19:08 +02:00
parent 6e1dd86e6a
commit 5b7ec40972
2 changed files with 143 additions and 165 deletions

View File

@ -111,16 +111,16 @@ suite "Onchain group manager":
(waitFor manager.init()).isErrOr:
raiseAssert "Expected error when keystore file doesn't exist"
test "trackRootChanges: start tracking roots":
(waitFor manager.init()).isOkOr:
raiseAssert $error
discard manager.trackRootChanges()
# test "trackRootChanges: start tracking roots":
# (waitFor manager.init()).isOkOr:
# raiseAssert $error
# discard manager.trackRootChanges()
test "trackRootChanges: should guard against uninitialized state":
try:
discard manager.trackRootChanges()
except CatchableError:
check getCurrentExceptionMsg().len == 38
# test "trackRootChanges: should guard against uninitialized state":
# try:
# discard manager.trackRootChanges()
# except CatchableError:
# check getCurrentExceptionMsg().len == 38
test "trackRootChanges: should sync to the state of the group":
let credentials = generateCredentials(manager.rlnInstance)
@ -178,19 +178,19 @@ suite "Onchain group manager":
merkleRootBefore != merkleRootAfter
manager.validRoots.len() == credentialCount
test "register: should guard against uninitialized state":
let dummyCommitment = default(IDCommitment)
# test "register: should guard against uninitialized state":
# let dummyCommitment = default(IDCommitment)
try:
waitFor manager.register(
RateCommitment(
idCommitment: dummyCommitment, userMessageLimit: UserMessageLimit(20)
)
)
except CatchableError:
assert true
except Exception:
assert false, "exception raised: " & getCurrentExceptionMsg()
# try:
# waitFor manager.register(
# RateCommitment(
# idCommitment: dummyCommitment, userMessageLimit: UserMessageLimit(20)
# )
# )
# except CatchableError:
# assert true
# except Exception:
# assert false, "exception raised: " & getCurrentExceptionMsg()
test "register: should register successfully":
# TODO :- similar to ```trackRootChanges: should fetch history correctly```
@ -307,38 +307,38 @@ suite "Onchain group manager":
check:
validated
test "validateRoot: should reject bad root":
let idCredentials = generateCredentials(manager.rlnInstance)
let idCommitment = idCredentials.idCommitment
# test "validateRoot: should reject bad root":
# let idCredentials = generateCredentials(manager.rlnInstance)
# let idCommitment = idCredentials.idCommitment
(waitFor manager.init()).isOkOr:
raiseAssert $error
# (waitFor manager.init()).isOkOr:
# raiseAssert $error
manager.userMessageLimit = some(UserMessageLimit(20))
manager.membershipIndex = some(MembershipIndex(0))
manager.idCredentials = some(idCredentials)
# manager.userMessageLimit = some(UserMessageLimit(20))
# manager.membershipIndex = some(MembershipIndex(0))
# manager.idCredentials = some(idCredentials)
manager.merkleProofCache = newSeq[byte](640)
for i in 0 ..< 640:
manager.merkleProofCache[i] = byte(rand(255))
# manager.merkleProofCache = newSeq[byte](640)
# for i in 0 ..< 640:
# manager.merkleProofCache[i] = byte(rand(255))
let messageBytes = "Hello".toBytes()
# let messageBytes = "Hello".toBytes()
let epoch = default(Epoch)
debug "epoch in bytes", epochHex = epoch.inHex()
# let epoch = default(Epoch)
# debug "epoch in bytes", epochHex = epoch.inHex()
let validProofRes = manager.generateProof(
data = messageBytes, epoch = epoch, messageId = MessageId(1)
)
# let validProofRes = manager.generateProof(
# data = messageBytes, epoch = epoch, messageId = MessageId(1)
# )
check:
validProofRes.isOk()
let validProof = validProofRes.get()
# check:
# validProofRes.isOk()
# let validProof = validProofRes.get()
let validated = manager.validateRoot(validProof.merkleRoot)
# let validated = manager.validateRoot(validProof.merkleRoot)
check:
validated == false
# check:
# validated == false
test "verifyProof: should verify valid proof":
let credentials = generateCredentials(manager.rlnInstance)
@ -428,69 +428,69 @@ suite "Onchain group manager":
check:
verified == false
test "root queue should be updated correctly":
const credentialCount = 12
let credentials = generateCredentials(manager.rlnInstance, credentialCount)
(waitFor manager.init()).isOkOr:
raiseAssert $error
# test "root queue should be updated correctly":
# const credentialCount = 12
# let credentials = generateCredentials(manager.rlnInstance, credentialCount)
# (waitFor manager.init()).isOkOr:
# raiseAssert $error
type TestBackfillFuts = array[0 .. credentialCount - 1, Future[void]]
var futures: TestBackfillFuts
for i in 0 ..< futures.len():
futures[i] = newFuture[void]()
# type TestBackfillFuts = array[0 .. credentialCount - 1, Future[void]]
# var futures: TestBackfillFuts
# for i in 0 ..< futures.len():
# futures[i] = newFuture[void]()
proc generateCallback(
futs: TestBackfillFuts, credentials: seq[IdentityCredential]
): OnRegisterCallback =
var futureIndex = 0
proc callback(registrations: seq[Membership]): Future[void] {.async.} =
if registrations.len == 1 and
registrations[0].rateCommitment ==
getRateCommitment(credentials[futureIndex], UserMessageLimit(20)).get() and
registrations[0].index == MembershipIndex(futureIndex):
futs[futureIndex].complete()
futureIndex += 1
# proc generateCallback(
# futs: TestBackfillFuts, credentials: seq[IdentityCredential]
# ): OnRegisterCallback =
# var futureIndex = 0
# proc callback(registrations: seq[Membership]): Future[void] {.async.} =
# if registrations.len == 1 and
# registrations[0].rateCommitment ==
# getRateCommitment(credentials[futureIndex], UserMessageLimit(20)).get() and
# registrations[0].index == MembershipIndex(futureIndex):
# futs[futureIndex].complete()
# futureIndex += 1
return callback
# return callback
try:
manager.onRegister(generateCallback(futures, credentials))
# try:
# manager.onRegister(generateCallback(futures, credentials))
for i in 0 ..< credentials.len():
waitFor manager.register(credentials[i], UserMessageLimit(20))
discard waitFor manager.updateRoots()
except Exception, CatchableError:
assert false, "exception raised: " & getCurrentExceptionMsg()
# for i in 0 ..< credentials.len():
# waitFor manager.register(credentials[i], UserMessageLimit(20))
# discard waitFor manager.updateRoots()
# except Exception, CatchableError:
# assert false, "exception raised: " & getCurrentExceptionMsg()
waitFor allFutures(futures)
# waitFor allFutures(futures)
check:
manager.validRoots.len() == credentialCount
# check:
# manager.validRoots.len() == credentialCount
test "isReady should return false if ethRpc is none":
(waitFor manager.init()).isOkOr:
raiseAssert $error
# test "isReady should return false if ethRpc is none":
# (waitFor manager.init()).isOkOr:
# raiseAssert $error
manager.ethRpc = none(Web3)
# manager.ethRpc = none(Web3)
var isReady = true
try:
isReady = waitFor manager.isReady()
except Exception, CatchableError:
assert false, "exception raised: " & getCurrentExceptionMsg()
# var isReady = true
# try:
# isReady = waitFor manager.isReady()
# except Exception, CatchableError:
# assert false, "exception raised: " & getCurrentExceptionMsg()
check:
isReady == false
# check:
# isReady == false
test "isReady should return true if ethRpc is ready":
(waitFor manager.init()).isOkOr:
raiseAssert $error
# test "isReady should return true if ethRpc is ready":
# (waitFor manager.init()).isOkOr:
# raiseAssert $error
var isReady = false
try:
isReady = waitFor manager.isReady()
except Exception, CatchableError:
assert false, "exception raised: " & getCurrentExceptionMsg()
# var isReady = false
# try:
# isReady = waitFor manager.isReady()
# except Exception, CatchableError:
# assert false, "exception raised: " & getCurrentExceptionMsg()
check:
isReady == true
# check:
# isReady == true

View File

@ -163,6 +163,44 @@ proc checkTokenAllowance*(
trace "Current allowance", owner = owner, spender = spender, allowance = allowance
return allowance
proc setupContractDeployment*(
forgePath: string, submodulePath: string
): Result[void, string] =
trace "Contract deployer paths", forgePath = forgePath, submodulePath = submodulePath
# Build the Foundry project
try:
let (forgeCleanOutput, forgeCleanExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} clean""")
trace "Executed forge clean command", output = forgeCleanOutput
if forgeCleanExitCode != 0:
return err("forge clean command failed")
let (forgeInstallOutput, forgeInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} install""")
trace "Executed forge install command", output = forgeInstallOutput
if forgeInstallExitCode != 0:
return err("forge install command failed")
let (pnpmInstallOutput, pnpmInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && pnpm install""")
trace "Executed pnpm install command", output = pnpmInstallOutput
if pnpmInstallExitCode != 0:
return err("pnpm install command failed" & pnpmInstallOutput)
let (forgeBuildOutput, forgeBuildExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} build""")
trace "Executed forge build command", output = forgeBuildOutput
if forgeBuildExitCode != 0:
return err("forge build command failed")
# Set the environment variable API keys to anything for local testnet deployment
putEnv("API_KEY_CARDONA", "123")
putEnv("API_KEY_LINEASCAN", "123")
putEnv("API_KEY_ETHERSCAN", "123")
except OSError, IOError:
return err("Command execution failed")
return ok()
proc deployTestToken*(
pk: keys.PrivateKey, acc: Address, web3: Web3
): Future[Result[Address, string]] {.async.} =
@ -177,45 +215,12 @@ proc deployTestToken*(
error "Submodule path does not exist", submodulePath = submodulePath
return err("Submodule path does not exist: " & submodulePath)
debug "Submodule path verified", submodulePath = submodulePath
let forgePath = getForgePath()
debug "Forge path", forgePath
# Verify forge executable exists
if not fileExists(forgePath):
error "Forge executable not found", forgePath = forgePath
return err("Forge executable not found: " & forgePath)
# Build the Foundry project
let (forgeCleanOutput, forgeCleanExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} clean""")
trace "Executed forge clean command", output = forgeCleanOutput
if forgeCleanExitCode != 0:
return error("forge clean command failed")
let (forgeInstallOutput, forgeInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} install""")
trace "Executed forge install command", output = forgeInstallOutput
if forgeInstallExitCode != 0:
return error("forge install command failed")
let (pnpmInstallOutput, pnpmInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && pnpm install""")
trace "Executed pnpm install command", output = pnpmInstallOutput
if pnpmInstallExitCode != 0:
return err("pnpm install command failed" & pnpmInstallOutput)
let (forgeBuildOutput, forgeBuildExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} build""")
trace "Executed forge build command", output = forgeBuildOutput
if forgeBuildExitCode != 0:
return error("forge build command failed")
# Set the environment variable API keys to anything for local testnet deployment
putEnv("API_KEY_CARDONA", "123")
putEnv("API_KEY_LINEASCAN", "123")
putEnv("API_KEY_ETHERSCAN", "123")
let setupContractEnv = setupContractDeployment(forgePath, submodulePath)
if setupContractEnv.isErr():
error "Failed to setup contract deployment"
return err("Failed to setup contract deployment")
# Deploy TestToken contract
let forgeCmdTestToken =
@ -315,7 +320,7 @@ proc approveTokenAllowanceAndVerify*(
web3.privateKey = oldPrivateKey
proc executeForgeContractDeployScripts*(
pk: keys.PrivateKey, acc: Address, web3: Web3
privateKey: keys.PrivateKey, acc: Address, web3: Web3
): Future[Result[Address, string]] {.async, gcsafe.} =
## Executes a set of foundry forge scripts required to deploy the RLN contract and returns the deployed proxy contract address
## submodulePath: path to the submodule containing contract deploy scripts
@ -328,7 +333,6 @@ proc executeForgeContractDeployScripts*(
error "Submodule path does not exist", submodulePath = submodulePath
return err("Submodule path does not exist: " & submodulePath)
let privateKey = $pk
let forgePath = getForgePath()
debug "Forge path", forgePath
@ -338,36 +342,10 @@ proc executeForgeContractDeployScripts*(
return err("Forge executable not found: " & forgePath)
trace "contract deployer account details", account = acc, privateKey = privateKey
# Build the Foundry project
let (forgeCleanOutput, forgeCleanExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} clean""")
trace "Executed forge clean command", output = forgeCleanOutput
if forgeCleanExitCode != 0:
return error("forge clean failed")
let (forgeInstallOutput, forgeInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} install""")
trace "Executed forge install command", output = forgeInstallOutput
if forgeInstallExitCode != 0:
return error("forge install failed")
let (pnpmInstallOutput, pnpmInstallExitCode) =
execCmdEx(fmt"""cd {submodulePath} && pnpm install""")
trace "Executed pnpm install command", output = pnpmInstallOutput
if pnpmInstallExitCode != 0:
return err("pnpm install command failed" & pnpmInstallOutput)
let (forgeBuildOutput, forgeBuildExitCode) =
execCmdEx(fmt"""cd {submodulePath} && {forgePath} build""")
trace "Executed forge build command", output = forgeBuildOutput
if forgeBuildExitCode != 0:
error("forge build failed")
# Set the environment variable API keys to anything for testing
putEnv("API_KEY_CARDONA", "123")
putEnv("API_KEY_LINEASCAN", "123")
putEnv("API_KEY_ETHERSCAN", "123")
let setupContractEnv = setupContractDeployment(forgePath, submodulePath)
if setupContractEnv.isErr():
error "Failed to setup contract deployment"
return err("Failed to setup contract deployment")
# Deploy LinearPriceCalculator contract
let forgeCmdPriceCalculator =