79 lines
2.1 KiB
Nim
79 lines
2.1 KiB
Nim
import pkg/ethers
|
|
import pkg/chronicles
|
|
import ../purchasing
|
|
import ../sales
|
|
import ../proving
|
|
import ./deployment
|
|
import ./storage
|
|
import ./market
|
|
import ./proofs
|
|
import ./clock
|
|
|
|
export purchasing
|
|
export sales
|
|
export proving
|
|
export chronicles
|
|
|
|
type
|
|
ContractInteractions* = ref object
|
|
purchasing*: Purchasing
|
|
sales*: Sales
|
|
proving*: Proving
|
|
clock: OnChainClock
|
|
|
|
proc new*(_: type ContractInteractions,
|
|
signer: Signer,
|
|
deployment: Deployment): ?ContractInteractions =
|
|
|
|
without address =? deployment.address(Storage):
|
|
error "Unable to determine address of the Storage smart contract"
|
|
return none ContractInteractions
|
|
|
|
let contract = Storage.new(address, signer)
|
|
let market = OnChainMarket.new(contract)
|
|
let proofs = OnChainProofs.new(contract)
|
|
let clock = OnChainClock.new(signer.provider)
|
|
let proving = Proving.new(proofs, clock)
|
|
some ContractInteractions(
|
|
purchasing: Purchasing.new(market, clock),
|
|
sales: Sales.new(market, clock, proving),
|
|
proving: proving,
|
|
clock: clock
|
|
)
|
|
|
|
proc new*(_: type ContractInteractions,
|
|
providerUrl: string,
|
|
account: Address,
|
|
deploymentFile: string = string.default): ?ContractInteractions =
|
|
|
|
let provider = JsonRpcProvider.new(providerUrl)
|
|
let signer = provider.getSigner(account)
|
|
|
|
var deploy: Deployment
|
|
try:
|
|
if deploymentFile == string.default:
|
|
deploy = deployment()
|
|
else:
|
|
deploy = deployment(deploymentFile)
|
|
except IOError as e:
|
|
error "Unable to read deployment json", msg = e.msg
|
|
return none ContractInteractions
|
|
|
|
ContractInteractions.new(signer, deploy)
|
|
|
|
proc new*(_: type ContractInteractions,
|
|
account: Address): ?ContractInteractions =
|
|
ContractInteractions.new("ws://localhost:8545", account)
|
|
|
|
proc start*(interactions: ContractInteractions) {.async.} =
|
|
await interactions.clock.start()
|
|
await interactions.sales.start()
|
|
await interactions.proving.start()
|
|
await interactions.purchasing.start()
|
|
|
|
proc stop*(interactions: ContractInteractions) {.async.} =
|
|
await interactions.purchasing.stop()
|
|
await interactions.sales.stop()
|
|
await interactions.proving.stop()
|
|
await interactions.clock.stop()
|