Skip to content
This repository has been archived by the owner on Nov 26, 2020. It is now read-only.

deals e2e onion example #170

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions onions/examples/deals-e2e.oni
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
;; this is the e2e deals test written as an onion script

;; import the onions module, which provides basic functionality
import onions
;; import the vm module, which provides the test driver
import vm

;; test parameters -- TODO figure out how to pass input parameters to scripts
;; -- it's ok for now to utilize modules and have a top script that defines
;; -- all parameters
nMiners = 2
nClients = 3
initialBalance = 2000000
presealSectors = 10

;; miner creation utility function
def createMiner(i, balance, sectors) {
actor = onions.createActor(balance)
minerPeerID = onions.createPeerID()
actor.peerID = minerPeerID
minerAddr = onions.minerAddr(i)
actor.minerAddr = minerAddr
preseals = onions.preseal(actor, minerAddr, sectors)
(actor, preseals)
}

;; preperation of the genesis block
actors = []
miners = []
preseals = []
for i = 1..nMiners {
actor, preseal = createMiner(i-1, initialBalance, presealSectors)
miners.append(actor)
actors.append(actor)
preseals.append(preseal)
}

for i = 1..nClients {
actor = onions.createActor(initialBalance)
actors.append(actor)
}

;; now we can create the genesis block
genesis = onions.createGenesis(actors, preseals)

;; and we start the vm execution
vm.start(genesis)

;; first messages: the miners must change their peerID
for i = 0..nMiners-1 {
miner = miners[i]
preseal = preseals[i]
msg = vm.newChangePeerIDMessage(miner.minerAddr, preseal.worker, miner.peerID, 0, 0, 1000000)
vm.push(msg)
}

;; commit the messages
vm.commit()


;; TODO
;; now we need to create some deals
;; we need to decompose all the deal consistuents into vm messages, create messages,
;; push them in the vm, and commit them
;; ....

;; end of the test
vm.end()
66 changes: 66 additions & 0 deletions onions/examples/deals_e2e.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package main

import (
"github.com/filecoin-project/oni/onions"
"github.com/filecoin-project/oni/onions/vm"
)

func main() {
// TODO these should be input parameters
nMiners := 2
nClients := 3
initialBalance := 2000000
presealSectors := 10

// create initial actors + genesis block
// Note: this can go into a utility method in the onions module
var actors []*onions.Actor
var miners []*onions.MinerActor
var preseals []*onions.Preseal
for i := 0; i < nMiners; i++ {
miner, err := onions.CreateMinerActor(i, initialBalance)
if err != nil {
panic(err)
}
miners = append(miners, miner)
actors = append(actors, miner.Actor)

preseal, err := onions.Preseal(miner, presealSectors)
if err != nil {
panic(err)
}
preseals = append(preseals, preseal)
}

for i := 0; i < nClients; i++ {
actor, err := onions.CreateActor(initialBalance)
if err != nil {
panic(err)
}
actors = append(actors, actor)
}

genesis, err := onions.CreateGenesis(actors, preseals)
if err != nil {
panic(err)
}

// start the vm execution
vm.Start(genesis)

// 1st batch of messages: miners must change their peer IDs
for i := 0; i < nMiners; i++ {
msg := onions.NewChangeMinerIDMessage(miner)
vm.Push(msg)
}

// commit the first batch of messages
vm.Commit()

// now we need to create some deals
// we need to decompose all the deal consistuents into vm messages, create messages,
// push them in the vm, and commit them for each block

// end of the test
vm.End()
}