nim-dagger/tests/contracts/examples.nim
Eric Mastro 2e5c28781c feat: integrate dagger contracts
Integrate dagger contracts from `nim-dagger-contracts` repo.

Add `dagger-contracts`, `nim-web3`, and all of `nim-web3`’s transitive deps as submodule deps to `nim-dagger`. Note: `nim-web3` and its transitive deps may no longer be needed when we switch to `nim-ethers`.

Add a `testContracts` nimble task to test all of the contracts functionality. Namely, this spins up an ethereum simulator, deploys the contracts (in `dagger-contracts`), runs the contract tests, and finally, regardless of success/error, kills the ethereum sim processes. The nimble task can be run with `./env.sh nimble testContracts`.

We also tested `nim-dagger-contracts` as a submodule dep of `nim-dagger`, and while the tests run as expected, the preference is to merge `nim-dagger-contracts` inside of `nim-dagger` for ease of parallel development. There’s also a high probability that `nim-dagger-contracts` is not being used as a dep by other projects. Are there any strong objections to this?

Co-authored-by: Michael Bradley <michaelsbradleyjr@gmail.com>
2022-02-04 15:34:56 +11:00

30 lines
976 B
Nim

import std/times
import pkg/stint
import pkg/nimcrypto
import dagger/contracts/marketplace
proc randomBytes(amount: static int): array[amount, byte] =
doAssert randomBytes(result) == amount
proc example*(_: type StorageRequest): StorageRequest =
StorageRequest(
duration: 150.u256, # 150 blocks ≈ half an hour
size: (1 * 1024 * 1024 * 1024).u256, # 1 Gigabyte
contentHash: sha256.digest(0xdeadbeef'u32.toBytes).data,
proofPeriod: 8.u256, # 8 blocks ≈ 2 minutes
proofTimeout: 4.u256, # 4 blocks ≈ 1 minute
nonce: randomBytes(32)
)
proc example*(_: type StorageBid): StorageBid =
StorageBid(
requestHash: hashRequest(StorageRequest.example),
bidExpiry: (getTime() + initDuration(hours=1)).toUnix.u256,
price: 42.u256
)
proc example*(_: type (StorageRequest, StorageBid)): (StorageRequest, StorageBid) =
result[0] = StorageRequest.example
result[1] = StorageBid.example
result[1].requestHash = hashRequest(result[0])