diff --git a/tvx/chain/address.go b/tvx/chain/address.go
index 63b77e5ff26..0e5385d957f 100644
--- a/tvx/chain/address.go
+++ b/tvx/chain/address.go
@@ -44,7 +44,7 @@ func MustNewActorAddr(data string) addr.Address {
 	return address
 }
 
-func MustIdFromAddress(a addr.Address) uint64 {
+func MustIDFromAddress(a addr.Address) uint64 {
 	if a.Protocol() != addr.ID {
 		panic("must be ID protocol address")
 	}
diff --git a/tvx/drivers/state_driver.go b/tvx/drivers/state_driver.go
index 616c748a0fa..f7170de096f 100644
--- a/tvx/drivers/state_driver.go
+++ b/tvx/drivers/state_driver.go
@@ -120,7 +120,7 @@ func (d *StateDriver) newMinerAccountActor(sealProofType abi_spec.RegisteredSeal
 	// creat a miner, owner, and its worker
 	minerOwnerPk, minerOwnerID := d.NewAccountActor(address.SECP256K1, big_spec.NewInt(1_000_000_000))
 	minerWorkerPk, minerWorkerID := d.NewAccountActor(address.BLS, big_spec.Zero())
-	expectedMinerActorIDAddress := chain.MustNewIDAddr(chain.MustIdFromAddress(minerWorkerID) + 1)
+	expectedMinerActorIDAddress := chain.MustNewIDAddr(chain.MustIDFromAddress(minerWorkerID) + 1)
 	minerActorAddrs := computeInitActorExecReturn(minerWorkerPk, 0, 1, expectedMinerActorIDAddress)
 
 	d.minerInfo = &MinerInfo{
diff --git a/tvx/drivers/test_driver.go b/tvx/drivers/test_driver.go
index 4f3406e873c..7ffa6f0dfd2 100644
--- a/tvx/drivers/test_driver.go
+++ b/tvx/drivers/test_driver.go
@@ -44,6 +44,7 @@ import (
 	"github.com/filecoin-project/lotus/chain/types"
 	"github.com/filecoin-project/oni/tvx/chain"
 	vtypes "github.com/filecoin-project/oni/tvx/chain/types"
+	"github.com/filecoin-project/oni/tvx/schema"
 )
 
 var (
@@ -235,6 +236,25 @@ func NewTestDriver() *TestDriver {
 	checkRet := true
 	config := NewConfig(checkExit, checkRet)
 
+	vector := schema.TestVector{
+		Class:    schema.ClassMessage,
+		Selector: "",
+		Meta: &schema.Metadata{
+			ID:      "TK",
+			Version: "TK",
+			Gen: schema.GenerationData{
+				Source:  "TK",
+				Version: "TK",
+			},
+		},
+		Pre: &schema.Preconditions{
+			StateTree: &schema.StateTree{},
+		},
+		Post: &schema.Postconditions{
+			StateTree: &schema.StateTree{},
+		},
+	}
+
 	return &TestDriver{
 		StateDriver: sd,
 
@@ -244,6 +264,7 @@ func NewTestDriver() *TestDriver {
 		SysCalls:        syscalls,
 
 		applier: applier,
+		Vector:  &vector,
 	}
 }
 
@@ -265,6 +286,9 @@ type TestDriver struct {
 	Config *Config
 
 	SysCalls *ChainValidationSysCalls
+	// Vector is the test vector that is used when methods are called on the
+	// driver that apply messages.
+	Vector *schema.TestVector
 }
 
 //
diff --git a/tvx/examine.go b/tvx/examine.go
index 40b3455eee5..d5d48344d58 100644
--- a/tvx/examine.go
+++ b/tvx/examine.go
@@ -14,6 +14,7 @@ import (
 	init_ "github.com/filecoin-project/specs-actors/actors/builtin/init"
 	"github.com/filecoin-project/specs-actors/actors/util/adt"
 
+	"github.com/filecoin-project/oni/tvx/schema"
 	"github.com/filecoin-project/oni/tvx/state"
 )
 
@@ -62,7 +63,7 @@ func runExamineCmd(_ *cli.Context) error {
 		return err
 	}
 
-	var tv TestVector
+	var tv schema.TestVector
 	if err := json.NewDecoder(file).Decode(&tv); err != nil {
 		return err
 	}
diff --git a/tvx/exec_lotus.go b/tvx/exec_lotus.go
index 4d191cf30eb..932d569ab5f 100644
--- a/tvx/exec_lotus.go
+++ b/tvx/exec_lotus.go
@@ -15,6 +15,7 @@ import (
 	"github.com/urfave/cli/v2"
 
 	"github.com/filecoin-project/oni/tvx/lotus"
+	"github.com/filecoin-project/oni/tvx/schema"
 )
 
 var execLotusFlags struct {
@@ -44,7 +45,7 @@ func runExecLotus(_ *cli.Context) error {
 
 		var (
 			dec = json.NewDecoder(file)
-			tv  TestVector
+			tv  schema.TestVector
 		)
 
 		if err = dec.Decode(&tv); err != nil {
@@ -55,7 +56,7 @@ func runExecLotus(_ *cli.Context) error {
 	default:
 		dec := json.NewDecoder(os.Stdin)
 		for {
-			var tv TestVector
+			var tv schema.TestVector
 
 			err := dec.Decode(&tv)
 			if err == io.EOF {
@@ -73,7 +74,7 @@ func runExecLotus(_ *cli.Context) error {
 	}
 }
 
-func executeTestVector(tv TestVector) error {
+func executeTestVector(tv schema.TestVector) error {
 	fmt.Println("executing test vector")
 	switch tv.Class {
 	case "message":
diff --git a/tvx/extract_msg.go b/tvx/extract_msg.go
index 3bf5f9a3b61..5648ad5a3b1 100644
--- a/tvx/extract_msg.go
+++ b/tvx/extract_msg.go
@@ -14,6 +14,7 @@ import (
 	"github.com/urfave/cli/v2"
 
 	"github.com/filecoin-project/oni/tvx/lotus"
+	"github.com/filecoin-project/oni/tvx/schema"
 	"github.com/filecoin-project/oni/tvx/state"
 )
 
@@ -178,27 +179,27 @@ func runExtractMsg(c *cli.Context) error {
 	}
 
 	// Write out the test vector.
-	vector := TestVector{
-		Class:    ClassMessage,
+	vector := schema.TestVector{
+		Class:    schema.ClassMessage,
 		Selector: "",
-		Meta: &Metadata{
+		Meta: &schema.Metadata{
 			ID:      "TK",
 			Version: "TK",
-			Gen: GenerationData{
+			Gen: schema.GenerationData{
 				Source:  "TK",
 				Version: version.String(),
 			},
 		},
 		CAR: out.Bytes(),
-		Pre: &Preconditions{
+		Pre: &schema.Preconditions{
 			Epoch: execTs.Height(),
-			StateTree: &StateTree{
+			StateTree: &schema.StateTree{
 				RootCID: preroot,
 			},
 		},
-		ApplyMessages: []Message{{Bytes: msgBytes}},
-		Post: &Postconditions{
-			StateTree: &StateTree{
+		ApplyMessages: []schema.Message{{Bytes: msgBytes}},
+		Post: &schema.Postconditions{
+			StateTree: &schema.StateTree{
 				RootCID: postroot,
 			},
 		},
diff --git a/tvx/schema.go b/tvx/schema/schema.go
similarity index 99%
rename from tvx/schema.go
rename to tvx/schema/schema.go
index be0a69cccbb..c0162df2871 100644
--- a/tvx/schema.go
+++ b/tvx/schema/schema.go
@@ -1,4 +1,4 @@
-package main
+package schema
 
 import (
 	"encoding/hex"
diff --git a/tvx/suite_messages_create_actor.go b/tvx/suite_messages_create_actor.go
index 0003200e3ef..0d9273d4a18 100644
--- a/tvx/suite_messages_create_actor.go
+++ b/tvx/suite_messages_create_actor.go
@@ -15,11 +15,12 @@ import (
 
 	"github.com/filecoin-project/oni/tvx/chain"
 	"github.com/filecoin-project/oni/tvx/drivers"
+	"github.com/filecoin-project/oni/tvx/schema"
 )
 
 var suiteMessagesCmd = &cli.Command{
 	Name:        "suite-messages",
-	Description: "",
+	Description: "generate test vectors from the messages test suite adapted from github.com/filecoin-project/chain-validation",
 	Action:      suiteMessages,
 }
 
@@ -90,8 +91,6 @@ func MessageTest_AccountActorCreation() error {
 		err := func() error {
 			td := drivers.NewTestDriver()
 
-			v := newEmptyMessageVector()
-
 			existingAccountAddr, _ := td.NewAccountActor(tc.existingActorType, tc.existingActorBal)
 
 			preroot := td.GetStateRoot()
@@ -101,7 +100,7 @@ func MessageTest_AccountActorCreation() error {
 			if err != nil {
 				return err
 			}
-			v.ApplyMessages = []Message{{Bytes: b}}
+			td.Vector.ApplyMessages = []schema.Message{{Bytes: b}}
 			result := td.ApplyFailure(
 				msg,
 				tc.expExitCode,
@@ -115,13 +114,13 @@ func MessageTest_AccountActorCreation() error {
 
 			postroot := td.GetStateRoot()
 
-			v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-			v.Pre.StateTree.RootCID = preroot
-			v.Post.StateTree.RootCID = postroot
+			td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+			td.Vector.Pre.StateTree.RootCID = preroot
+			td.Vector.Post.StateTree.RootCID = postroot
 
 			// encode and output
 			enc := json.NewEncoder(os.Stdout)
-			if err := enc.Encode(&v); err != nil {
+			if err := enc.Encode(&td.Vector); err != nil {
 				return err
 			}
 
@@ -139,8 +138,6 @@ func MessageTest_AccountActorCreation() error {
 func MessageTest_InitActorSequentialIDAddressCreate() error {
 	td := drivers.NewTestDriver()
 
-	v := newEmptyMessageVector()
-
 	var initialBal = abi_spec.NewTokenAmount(200_000_000_000)
 	var toSend = abi_spec.NewTokenAmount(10_000)
 
@@ -148,8 +145,8 @@ func MessageTest_InitActorSequentialIDAddressCreate() error {
 
 	receiver, receiverID := td.NewAccountActor(drivers.SECP, initialBal)
 
-	firstPaychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 1)
-	secondPaychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 2)
+	firstPaychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 1)
+	secondPaychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 2)
 
 	firstInitRet := td.ComputeInitActorExecReturn(sender, 0, 0, firstPaychAddr)
 	secondInitRet := td.ComputeInitActorExecReturn(sender, 1, 0, secondPaychAddr)
@@ -166,7 +163,7 @@ func MessageTest_InitActorSequentialIDAddressCreate() error {
 	if err != nil {
 		return err
 	}
-	v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: b1})
+	td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: b1})
 
 	msg2 := td.MessageProducer.CreatePaymentChannelActor(sender, receiver, chain.Value(toSend), chain.Nonce(1))
 	td.ApplyExpect(
@@ -178,40 +175,19 @@ func MessageTest_InitActorSequentialIDAddressCreate() error {
 	if err != nil {
 		return err
 	}
-	v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: b2})
+	td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: b2})
 
 	postroot := td.GetStateRoot()
 
-	v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-	v.Pre.StateTree.RootCID = preroot
-	v.Post.StateTree.RootCID = postroot
+	td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+	td.Vector.Pre.StateTree.RootCID = preroot
+	td.Vector.Post.StateTree.RootCID = postroot
 
 	// encode and output
 	enc := json.NewEncoder(os.Stdout)
-	if err := enc.Encode(&v); err != nil {
+	if err := enc.Encode(&td.Vector); err != nil {
 		return err
 	}
 
 	return nil
 }
-
-func newEmptyMessageVector() TestVector {
-	return TestVector{
-		Class:    ClassMessage,
-		Selector: "",
-		Meta: &Metadata{
-			ID:      "TK",
-			Version: "TK",
-			Gen: GenerationData{
-				Source:  "TK",
-				Version: "TK",
-			},
-		},
-		Pre: &Preconditions{
-			StateTree: &StateTree{},
-		},
-		Post: &Postconditions{
-			StateTree: &StateTree{},
-		},
-	}
-}
diff --git a/tvx/suite_messages_message_application.go b/tvx/suite_messages_message_application.go
index 40ced19e3c0..9656dd865fe 100644
--- a/tvx/suite_messages_message_application.go
+++ b/tvx/suite_messages_message_application.go
@@ -12,6 +12,7 @@ import (
 
 	"github.com/filecoin-project/oni/tvx/chain"
 	"github.com/filecoin-project/oni/tvx/drivers"
+	"github.com/filecoin-project/oni/tvx/schema"
 )
 
 func MessageTest_MessageApplicationEdgecases() error {
@@ -21,13 +22,12 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err := func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 
 		preroot := td.GetStateRoot()
 
 		msg := td.MessageProducer.Transfer(alice, alice, chain.Value(transferAmnt), chain.Nonce(0), chain.GasPrice(1), chain.GasLimit(8))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		td.ApplyFailure(
 			msg,
@@ -35,13 +35,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -54,12 +54,11 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 
 		preroot := td.GetStateRoot()
 		msg := td.MessageProducer.Transfer(alice, alice, chain.Value(transferAmnt), chain.Nonce(0), chain.GasPrice(10), chain.GasLimit(1))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// Expect Message application to fail due to lack of gas
 		td.ApplyFailure(
@@ -68,7 +67,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		unknown := chain.MustNewIDAddr(10000000)
 		msg = td.MessageProducer.Transfer(unknown, alice, chain.Value(transferAmnt), chain.Nonce(0), chain.GasPrice(10), chain.GasLimit(1))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// Expect Message application to fail due to lack of gas when sender is unknown
 		td.ApplyFailure(
@@ -77,13 +76,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -96,8 +95,6 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 		preroot := td.GetStateRoot()
 
@@ -109,7 +106,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 		newAccountA := chain.MustNewSECP256K1Addr("1")
 
 		msg := td.MessageProducer.Transfer(alice, newAccountA, chain.Value(transferAmnt), chain.Nonce(aliceNonceF()))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// get the "true" gas cost of applying the message
 		result := td.ApplyOk(msg)
@@ -120,7 +117,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 		newAccountB := chain.MustNewSECP256K1Addr("2")
 		for tryGas := trueGas - gasStep; tryGas > 0; tryGas -= gasStep {
 			msg := td.MessageProducer.Transfer(alice, newAccountB, chain.Value(transferAmnt), chain.Nonce(aliceNonceF()), chain.GasPrice(1), chain.GasLimit(tryGas))
-			v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+			td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 			td.ApplyFailure(
 				msg,
@@ -130,13 +127,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -149,14 +146,12 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 
 		preroot := td.GetStateRoot()
 
 		msg := td.MessageProducer.Transfer(alice, alice, chain.Value(transferAmnt), chain.Nonce(1))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// Expect Message application to fail due to callseqnum being invalid: 1 instead of 0
 		td.ApplyFailure(
@@ -165,7 +160,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		unknown := chain.MustNewIDAddr(10000000)
 		msg = td.MessageProducer.Transfer(unknown, alice, chain.Value(transferAmnt), chain.Nonce(1))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// Expect message application to fail due to unknow actor when call seq num is also incorrect
 		td.ApplyFailure(
@@ -174,13 +169,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -193,8 +188,6 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		const pcTimeLock = abi_spec.ChainEpoch(10)
 		const pcLane = uint64(123)
 		const pcNonce = uint64(1)
@@ -212,13 +205,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 		receiver, receiverID := td.NewAccountActor(drivers.SECP, initialBal)
 
 		// the _expected_ address of the payment channel
-		paychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 1)
+		paychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 1)
 		createRet := td.ComputeInitActorExecReturn(sender, 0, 0, paychAddr)
 
 		preroot := td.GetStateRoot()
 
 		msg := td.MessageProducer.CreatePaymentChannelActor(sender, receiver, chain.Value(toSend), chain.Nonce(0))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		td.ApplyExpect(
 			msg,
@@ -239,7 +232,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 				Signature:       pcSig, // construct with invalid signature
 			},
 		}, chain.Nonce(1), chain.Value(big_spec.Zero()))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// message application fails due to invalid argument (signature).
 		td.ApplyFailure(
@@ -248,13 +241,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -267,15 +260,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 
 		preroot := td.GetStateRoot()
 
 		msg := td.MessageProducer.MarketComputeDataCommitment(alice, alice, nil, chain.Nonce(0))
 
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// message application fails because ComputeDataCommitment isn't defined
 		// on the recipient actor
@@ -285,13 +276,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -304,8 +295,6 @@ func MessageTest_MessageApplicationEdgecases() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		alice, _ := td.NewAccountActor(drivers.SECP, aliceBal)
 
 		preroot := td.GetStateRoot()
@@ -314,7 +303,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 		unknownA := chain.MustNewIDAddr(10000000)
 		msg := td.MessageProducer.Transfer(alice, unknownA, chain.Value(transferAmnt), chain.Nonce(0))
 
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		td.ApplyFailure(
 			msg,
@@ -323,7 +312,7 @@ func MessageTest_MessageApplicationEdgecases() error {
 		// Sending a message to non-existing actor address must produce an error.
 		unknownB := chain.MustNewActorAddr("1234")
 		msg = td.MessageProducer.Transfer(alice, unknownB, chain.Value(transferAmnt), chain.Nonce(1))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		td.ApplyFailure(
 			msg,
@@ -331,13 +320,13 @@ func MessageTest_MessageApplicationEdgecases() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
diff --git a/tvx/suite_messages_paych.go b/tvx/suite_messages_paych.go
index 9d8e3a0e6fb..3a6e9d23c44 100644
--- a/tvx/suite_messages_paych.go
+++ b/tvx/suite_messages_paych.go
@@ -12,6 +12,7 @@ import (
 
 	"github.com/filecoin-project/oni/tvx/chain"
 	"github.com/filecoin-project/oni/tvx/drivers"
+	"github.com/filecoin-project/oni/tvx/schema"
 )
 
 func MessageTest_Paych() error {
@@ -21,8 +22,6 @@ func MessageTest_Paych() error {
 	err := func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		// will create and send on payment channel
 		sender, senderID := td.NewAccountActor(drivers.SECP, initialBal)
 
@@ -32,11 +31,11 @@ func MessageTest_Paych() error {
 		preroot := td.GetStateRoot()
 
 		// the _expected_ address of the payment channel
-		paychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 1)
+		paychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 1)
 		createRet := td.ComputeInitActorExecReturn(sender, 0, 0, paychAddr)
 
 		msg := td.MessageProducer.CreatePaymentChannelActor(sender, receiver, chain.Value(toSend), chain.Nonce(0))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		// init actor creates the payment channel
 		td.ApplyExpect(
@@ -51,13 +50,13 @@ func MessageTest_Paych() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -70,8 +69,6 @@ func MessageTest_Paych() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		//const pcTimeLock = abi_spec.ChainEpoch(1)
 		const pcTimeLock = abi_spec.ChainEpoch(0)
 		const pcLane = uint64(123)
@@ -91,11 +88,11 @@ func MessageTest_Paych() error {
 		preroot := td.GetStateRoot()
 
 		// the _expected_ address of the payment channel
-		paychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 1)
+		paychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 1)
 		createRet := td.ComputeInitActorExecReturn(sender, 0, 0, paychAddr)
 
 		msg := td.MessageProducer.CreatePaymentChannelActor(sender, receiver, chain.Value(toSend), chain.Nonce(0))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 		td.ApplyExpect(
 			msg,
 			chain.MustSerialize(&createRet))
@@ -115,7 +112,7 @@ func MessageTest_Paych() error {
 				Signature:       pcSig,
 			},
 		}, chain.Nonce(1), chain.Value(big_spec.Zero()))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 		td.ApplyOk(msg)
 
 		var pcState paych_spec.State
@@ -128,13 +125,13 @@ func MessageTest_Paych() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}
 
@@ -147,18 +144,16 @@ func MessageTest_Paych() error {
 	err = func(testname string) error {
 		td := drivers.NewTestDriver()
 
-		v := newEmptyMessageVector()
-
 		// create the payment channel
 		sender, _ := td.NewAccountActor(drivers.SECP, initialBal)
 		receiver, receiverID := td.NewAccountActor(drivers.SECP, initialBal)
-		paychAddr := chain.MustNewIDAddr(chain.MustIdFromAddress(receiverID) + 1)
+		paychAddr := chain.MustNewIDAddr(chain.MustIDFromAddress(receiverID) + 1)
 		initRet := td.ComputeInitActorExecReturn(sender, 0, 0, paychAddr)
 
 		preroot := td.GetStateRoot()
 
 		msg := td.MessageProducer.CreatePaymentChannelActor(sender, receiver, chain.Value(toSend), chain.Nonce(0))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 		td.ApplyExpect(
 			msg,
 			chain.MustSerialize(&initRet))
@@ -183,21 +178,21 @@ func MessageTest_Paych() error {
 			},
 		}, chain.Nonce(1), chain.Value(big_spec.Zero()))
 
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 
 		td.ApplyOk(msg)
 
 		// settle the payment channel so it may be collected
 
 		msg = td.MessageProducer.PaychSettle(receiver, paychAddr, nil, chain.Value(big_spec.Zero()), chain.Nonce(0))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Bytes: chain.MustSerialize(msg)})
 		settleResult := td.ApplyOk(msg)
 
 		// advance the epoch so the funds may be redeemed.
 		td.ExeCtx.Epoch += paych_spec.SettleDelay
 
 		msg = td.MessageProducer.PaychCollect(receiver, paychAddr, nil, chain.Nonce(1), chain.Value(big_spec.Zero()))
-		v.ApplyMessages = append(v.ApplyMessages, Message{Epoch: &td.ExeCtx.Epoch, Bytes: chain.MustSerialize(msg)})
+		td.Vector.ApplyMessages = append(td.Vector.ApplyMessages, schema.Message{Epoch: &td.ExeCtx.Epoch, Bytes: chain.MustSerialize(msg)})
 
 		collectResult := td.ApplyOk(msg)
 
@@ -208,13 +203,13 @@ func MessageTest_Paych() error {
 
 		postroot := td.GetStateRoot()
 
-		v.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
-		v.Pre.StateTree.RootCID = preroot
-		v.Post.StateTree.RootCID = postroot
+		td.Vector.CAR = td.MustMarshalGzippedCAR(preroot, postroot)
+		td.Vector.Pre.StateTree.RootCID = preroot
+		td.Vector.Post.StateTree.RootCID = postroot
 
 		// encode and output
 		enc := json.NewEncoder(os.Stdout)
-		if err := enc.Encode(&v); err != nil {
+		if err := enc.Encode(&td.Vector); err != nil {
 			return err
 		}