func NewContract(caller ContractRef, object ContractRef, value *big.Int, gas uint64) *Contract {
	c := &Contract{CallerAddress: caller.Address(), caller: caller, self: object}
	if parent, ok := caller.(*Contract); ok {
		c.jumpdests = parent.jumpdests
	} else {
		c.jumpdests = make(map[sdk.Hash]bitvec)
	}
	c.Gas = gas
	c.value = value
	return c
}
NewContract creates a new Contract object
package vm
import (
	"math/big"
	sdk "github.com/Dipper-Labs/Dipper-Protocol/types"
)
type ContractRef interface {
	Address() sdk.AccAddress
}
type AccountRef sdk.AccAddress
func (ar AccountRef) Address() sdk.AccAddress {
	return (sdk.AccAddress)(ar)
}
type Contract struct {
	CallerAddress sdk.AccAddress
	caller        ContractRef
	self          ContractRef
	jumpdests map[sdk.Hash]bitvec  
	analysis  bitvec               
	Code     []byte
	CodeHash sdk.Hash
	CodeAddr *sdk.AccAddress
	Input    []byte
	Gas   uint64
	value *big.Int
}