@@ -12,6 +12,6 @@ import (
 // Message is the interface that defines methods to manage various message operations,
 // like sending and awaiting mined ones.
 type Message interface {
-	Send(ctx context.Context, from, to types.Address, val *types.AttoFIL) (*cid.Cid, error)
+	Send(ctx context.Context, from, to types.Address, val *types.AttoFIL, method string, params ...interface{}) (*cid.Cid, error)
 	Wait(ctx context.Context, msgCid *cid.Cid, cb func(blk *types.Block, msg *types.SignedMessage, receipt *types.MessageReceipt, signature *exec.FunctionSignature) error) error
 }
package api

import (
	"context"

	"gx/ipfs/QmYVNvtQkeZ6AKSwDrjQTs432QtL6umrrK41EBq3cu7iSP/go-cid"

	"github.com/filecoin-project/go-filecoin/exec"
	"github.com/filecoin-project/go-filecoin/types"
)

// Message is the interface that defines methods to manage various message operations,
// like sending and awaiting mined ones.
type Message interface {
	Send(ctx context.Context, from, to types.Address, val *types.AttoFIL) (*cid.Cid, error)
	Wait(ctx context.Context, msgCid *cid.Cid, cb func(blk *types.Block, msg *types.SignedMessage, receipt *types.MessageReceipt, signature *exec.FunctionSignature) error) error
}

Non-blocking: Should we add `Query` to this interface? `sendQuery` in api/impl/paych makes a good candidate for the implementation. I'm about to embark on replacing places where we access storagemarket and miner actor state with query messages. As these actors's state management gets more sophisticated, direct access to their state becomes unworkable. We need something like query messages to become first class in the system.