api

package
v0.62.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 8, 2022 License: MIT Imports: 29 Imported by: 1

Documentation

Overview

Package api exposes all the wallet capabilities to manage connections, wallets, keys, and transactions.

It is built with th JSON-RPC v2 standard. More info: See https://www.jsonrpc.org/specification for more information.

Terminology

User:

The user is the actor behind the API that has the responsibility to
review and validate the requests. It can be a human or a bot.

Wallet front-end:

The wallet front-end is the interface through which the user interact
with the API. It can be a command-line interface, a graphical
user-interface, or a script.

Third-party application:

The application that connects to the API (through HTTP or directly to
JSON-RPC) to access wallets information, send transaction, etc.

Third-party application workflow

All applications consuming this API should start with the following workflow:

  1. connect_wallet: it allows the third-party application to initiate the connection with the API.

  2. get_permissions: the application requires permissions from the user to consume the API. As a result, it should check if it has enough.

  3. request_permissions: if the application doesn't have enough permissions to work, it has to request some.

Index

Constants

View Source
const (

	// ErrorCodeNodeRequestFailed refers to the inability of the program to
	// talk to the network nodes.
	ErrorCodeNodeRequestFailed jsonrpc.ErrorCode = 1000

	// ErrorCodeRequestNotPermitted refers a request made by a third-party application
	// that is not permitted to do. This error is related to the permissions'
	// system.
	ErrorCodeRequestNotPermitted jsonrpc.ErrorCode = 2000

	// ErrorCodeRequestHasBeenCanceledByApplication refers to an automated cancellation of a
	// request by the application core. This happens when some requirements are
	// missing to ensure correct handling of a request.
	ErrorCodeRequestHasBeenCanceledByApplication jsonrpc.ErrorCode = 2001

	// ErrorCodeConnectionHasBeenClosed refers to an interruption of the service triggered
	// by the user.
	ErrorCodeConnectionHasBeenClosed jsonrpc.ErrorCode = 3000

	// ErrorCodeRequestHasBeenRejected refers to an explicit rejection of a request by the
	// user. When received, the third-party application should consider the user
	// has withdrawn from the action, and thus, abort the action.
	ErrorCodeRequestHasBeenRejected jsonrpc.ErrorCode = 3001

	// ErrorCodeRequestHasBeenCanceledByUser refers to a cancellation of a request by the
	// user. It's conceptually different from a rejection. Contrary to a rejection,
	// when a cancellation is received, the third-party application should temporarily
	// back off, maintain its state, and wait for the user to be ready to continue.
	ErrorCodeRequestHasBeenCanceledByUser jsonrpc.ErrorCode = 3002
)
View Source
const PermissionsSuccessfullyUpdated = "The permissions have been successfully updated."
View Source
const TransactionSuccessfullySigned = "The transaction has been successfully signed."
View Source
const WalletConnectionSuccessfullyEstablished = "The connection to the wallet has been successfully established."

Variables

View Source
var (
	ErrApplicationCanceledTheRequest                      = errors.New("the application canceled the request")
	ErrBlockHashIsRequired                                = errors.New("the block hash is required")
	ErrBlockHeightIsRequired                              = errors.New("the block-height is required")
	ErrCannotRotateKeysOnIsolatedWallet                   = errors.New("cannot rotate keys on an isolated wallet")
	ErrChainIDIsRequired                                  = errors.New("the chain ID is required")
	ErrConnectionTokenIsRequired                          = errors.New("the connection token is required")
	ErrCouldNotConnectToWallet                            = errors.New("could not connect to the wallet")
	ErrCouldNotGetChainIDFromNode                         = errors.New("could not get the chain ID from the node")
	ErrCouldNotGetLastBlockInformation                    = errors.New("could not get information about the last block on the network")
	ErrCouldNotRequestPermissions                         = errors.New("could not request permissions")
	ErrCouldNotSendTransaction                            = errors.New("could not send transaction")
	ErrCouldNotSignTransaction                            = errors.New("could not sign transaction")
	ErrCurrentPublicKeyDoesNotExist                       = errors.New("the current public key does not exist")
	ErrCurrentPublicKeyIsRequired                         = errors.New("the next public key is required")
	ErrEnactmentBlockHeightIsRequired                     = errors.New("the enactment block height is required")
	ErrEnactmentBlockHeightMustBeGreaterThanSubmissionOne = errors.New("the enactment block height must be greater than the submission one")
	ErrEncodedMessageIsNotValidBase64String               = errors.New("the encoded message is not a valid base-64 string")
	ErrEncodedSignatureIsNotValidBase64String             = errors.New("the encoded signature is not a valid base-64 string")
	ErrEncodedTransactionIsNotValidBase64String           = errors.New("the encoded transaction is not a valid base-64 string")
	ErrEncodedTransactionIsRequired                       = errors.New("the encoded transaction is required")
	ErrHostnameIsRequired                                 = errors.New("the hostname is required")
	ErrInvalidLogLevelValue                               = errors.New("invalid log level value")
	ErrInvalidTokenExpiryValue                            = errors.New("invalid token expiry value")
	ErrIsolatedWalletPassphraseIsRequired                 = errors.New("the isolated wallet passphrase is required")
	ErrLastBlockDataOrNetworkIsRequired                   = errors.New("a network or the last block data is required")
	ErrMessageIsRequired                                  = errors.New("the message is required")
	ErrMultipleNetworkSources                             = errors.New("network sources are mutually exclusive")
	ErrNetworkAlreadyExists                               = errors.New("a network with the same name already exists")
	ErrNetworkConfigurationDoesNotHaveGRPCNodes           = errors.New("the network does not have gRPC hosts configured")
	ErrNetworkDoesNotExist                                = errors.New("the network does not exist")
	ErrNetworkIsRequired                                  = errors.New("the network is required")
	ErrNetworkNameIsRequired                              = errors.New("the network name is required")
	ErrNetworkOrNodeAddressIsRequired                     = errors.New("a network or a node address is required")
	ErrNetworkSourceIsRequired                            = errors.New("a network source is required")
	ErrNewNameIsRequired                                  = errors.New("the new name is required")
	ErrNewPassphraseIsRequired                            = errors.New("the new passphrase is required")
	ErrNextAndCurrentPublicKeysCannotBeTheSame            = errors.New("the next and current public keys cannot be the same")
	ErrNextPublicKeyDoesNotExist                          = errors.New("the next public key does not exist")
	ErrNextPublicKeyIsRequired                            = errors.New("the next public key is required")
	ErrNextPublicKeyIsTainted                             = errors.New("the next public key is tainted")
	ErrNoHealthyNodeAvailable                             = errors.New("no healthy node available")
	ErrNoWalletToConnectTo                                = errors.New("there is no wallet to connect to, you should, first, create or import a wallet")
	ErrParamsDoNotMatch                                   = errors.New("the params do not match expected ones")
	ErrParamsRequired                                     = errors.New("the params are required")
	ErrPassphraseIsRequired                               = errors.New("the passphrase is required")
	ErrProofOfWorkDifficultyRequired                      = errors.New("the proof-of-work difficulty is required")
	ErrProofOfWorkHashFunctionRequired                    = errors.New("the proof-of-work hash function is required")
	ErrPublicKeyDoesNotExist                              = errors.New("the public key does not exist")
	ErrPublicKeyIsNotAllowedToBeUsed                      = errors.New("the public key is not allowed to be used")
	ErrPublicKeyIsRequired                                = errors.New("the public key is required")
	ErrReadAccessOnPublicKeysRequired                     = errors.New(`a "read" access on public keys is required`)
	ErrRecoveryPhraseIsRequired                           = errors.New("the recovery phrase is required")
	ErrRequestInterrupted                                 = errors.New("the request has been interrupted")
	ErrRequestedPermissionsAreRequired                    = errors.New("the requested permissions are required")
	ErrSendingModeCannotBeTypeUnspecified                 = errors.New(`the sending mode can't be "TYPE_UNSPECIFIED"`)
	ErrSendingModeIsRequired                              = errors.New("the sending mode is required")
	ErrSignatureIsRequired                                = errors.New("the the signature is required")
	ErrSpecifyingNetworkAndLastBlockDataIsNotSupported    = errors.New("specifying a network and the last block data is not supported")
	ErrSpecifyingNetworkAndNodeAddressIsNotSupported      = errors.New("specifying a network and a node address is not supported")
	ErrSubmissionBlockHeightIsRequired                    = errors.New("the submission block height is required")
	ErrTransactionFailed                                  = errors.New("the transaction failed")
	ErrTransactionIsMalformed                             = errors.New("the transaction is malformed")
	ErrUserCanceledTheRequest                             = errors.New("the user canceled the request")
	ErrUserCloseTheConnection                             = errors.New("the user closed the connection")
	ErrUserRejectedTheRequest                             = errors.New("the user rejected the request")
	ErrWalletAlreadyExists                                = errors.New("a wallet with the same name already exists")
	ErrWalletDoesNotExist                                 = errors.New("the wallet does not exist")
	ErrWalletIsRequired                                   = errors.New("the wallet is required")
	ErrWalletVersionIsRequired                            = errors.New("the wallet version is required")
)
View Source
var ErrInvalidNetworkSource = errors.New("invalid network source")
View Source
var ErrNoWalletConnected = errors.New("no wallet connected")

Functions

func AdminAPI added in v0.55.0

func AdminAPI(log *zap.Logger, walletStore WalletStore, netStore NetworkStore, nodeSelectorBuilder NodeSelectorBuilder) (*jsonrpc.API, error)

AdminAPI builds the JSON-RPC API of the wallet with all the methods available. This API exposes highly-sensitive methods, and, as a result, it should be only exposed to highly-trustable applications.

func ClientAPI added in v0.58.0

func ClientAPI(log *zap.Logger, walletStore WalletStore, interactor Interactor, nodeSelector node.Selector) (*jsonrpc.API, error)

ClientAPI builds the wallet JSON-RPC API with specific methods that are intended to be publicly exposed to third-party applications in a non-trustable environment. Because of the nature of the environment from where these methods are called, no administration methods are exposed. We don't want malicious third-party applications to leverage administration capabilities that could expose to the user and compromise his wallets.

func TraceIDFromContext

func TraceIDFromContext(ctx context.Context) string

Types

type AdminAnnotateKey added in v0.55.0

type AdminAnnotateKey struct {
	// contains filtered or unexported fields
}

func NewAdminAnnotateKey added in v0.55.0

func NewAdminAnnotateKey(
	walletStore WalletStore,
) *AdminAnnotateKey

func (*AdminAnnotateKey) Handle added in v0.55.0

Handle attaches metadata to the specified public key. It doesn't update in place. It overwrites. All existing metadata have to be specified to not lose them.

type AdminAnnotateKeyParams added in v0.55.0

type AdminAnnotateKeyParams struct {
	Wallet     string            `json:"wallet"`
	PublicKey  string            `json:"publicKey"`
	Metadata   []wallet.Metadata `json:"metadata"`
	Passphrase string            `json:"passphrase"`
}

type AdminAnnotateKeyResult added in v0.55.0

type AdminAnnotateKeyResult struct {
	Metadata []wallet.Metadata `json:"metadata"`
}

type AdminCreateWallet added in v0.55.0

type AdminCreateWallet struct {
	// contains filtered or unexported fields
}

func NewAdminCreateWallet added in v0.55.0

func NewAdminCreateWallet(
	walletStore WalletStore,
) *AdminCreateWallet

func (*AdminCreateWallet) Handle added in v0.55.0

Handle creates a wallet and generates its first key.

type AdminCreateWalletParams added in v0.55.0

type AdminCreateWalletParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

type AdminCreateWalletResult added in v0.55.0

type AdminCreateWalletResult struct {
	Wallet AdminCreatedWallet  `json:"wallet"`
	Key    AdminFirstPublicKey `json:"key"`
}

type AdminCreatedWallet added in v0.55.0

type AdminCreatedWallet struct {
	Name           string `json:"name"`
	Version        uint32 `json:"version"`
	RecoveryPhrase string `json:"recoveryPhrase"`
	FilePath       string `json:"filePath"`
}

type AdminDescribeKey added in v0.55.0

type AdminDescribeKey struct {
	// contains filtered or unexported fields
}

func NewAdminDescribeKey added in v0.55.0

func NewAdminDescribeKey(
	walletStore WalletStore,
) *AdminDescribeKey

func (*AdminDescribeKey) Handle added in v0.55.0

Handle retrieves key's information.

type AdminDescribeKeyParams added in v0.55.0

type AdminDescribeKeyParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
	PublicKey  string `json:"publicKey"`
}

type AdminDescribeKeyResult added in v0.55.0

type AdminDescribeKeyResult struct {
	PublicKey string            `json:"publicKey"`
	Name      string            `json:"name"`
	Algorithm wallet.Algorithm  `json:"algorithm"`
	Metadata  []wallet.Metadata `json:"metadata"`
	IsTainted bool              `json:"isTainted"`
}

type AdminDescribeNetwork added in v0.55.0

type AdminDescribeNetwork struct {
	// contains filtered or unexported fields
}

func NewAdminDescribeNetwork added in v0.55.0

func NewAdminDescribeNetwork(
	networkStore NetworkStore,
) *AdminDescribeNetwork

func (*AdminDescribeNetwork) Handle added in v0.55.0

Handle retrieve a wallet from its name and passphrase.

type AdminDescribeNetworkParams added in v0.55.0

type AdminDescribeNetworkParams struct {
	Network string `json:"network"`
}

type AdminDescribeNetworkResult added in v0.55.0

type AdminDescribeNetworkResult struct {
	Name        string              `json:"name"`
	LogLevel    vgencoding.LogLevel `json:"logLevel"`
	TokenExpiry vgencoding.Duration `json:"tokenExpiry"`
	Port        int                 `json:"port"`
	Host        string              `json:"host"`
	API         struct {
		GRPCConfig struct {
			Hosts   []string `json:"hosts"`
			Retries uint64   `json:"retries"`
		} `json:"grpcConfig"`
		RESTConfig struct {
			Hosts []string `json:"hosts"`
		} `json:"restConfig"`
		GraphQLConfig struct {
			Hosts []string `json:"hosts"`
		} `json:"graphQLConfig"`
	} `json:"api"`
}

type AdminDescribePermissions added in v0.55.0

type AdminDescribePermissions struct {
	// contains filtered or unexported fields
}

func NewAdminDescribePermissions added in v0.55.0

func NewAdminDescribePermissions(
	walletStore WalletStore,
) *AdminDescribePermissions

func (*AdminDescribePermissions) Handle added in v0.55.0

Handle retrieves permissions set for the specified wallet and hostname.

type AdminDescribePermissionsParams added in v0.55.0

type AdminDescribePermissionsParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
	Hostname   string `json:"hostname"`
}

type AdminDescribePermissionsResult added in v0.55.0

type AdminDescribePermissionsResult struct {
	Permissions wallet.Permissions `json:"permissions"`
}

type AdminDescribeWallet added in v0.55.0

type AdminDescribeWallet struct {
	// contains filtered or unexported fields
}

func NewAdminDescribeWallet added in v0.55.0

func NewAdminDescribeWallet(
	walletStore WalletStore,
) *AdminDescribeWallet

func (*AdminDescribeWallet) Handle added in v0.55.0

Handle retrieve a wallet from its name and passphrase.

type AdminDescribeWalletParams added in v0.55.0

type AdminDescribeWalletParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

type AdminDescribeWalletResult added in v0.55.0

type AdminDescribeWalletResult struct {
	Name    string `json:"name"`
	ID      string `json:"id"`
	Type    string `json:"type"`
	Version uint32 `json:"version"`
}

type AdminFirstPublicKey added in v0.55.0

type AdminFirstPublicKey struct {
	PublicKey string            `json:"publicKey"`
	Algorithm wallet.Algorithm  `json:"algorithm"`
	Meta      []wallet.Metadata `json:"metadata"`
}

type AdminGenerateKey added in v0.55.0

type AdminGenerateKey struct {
	// contains filtered or unexported fields
}

func NewAdminGenerateKey added in v0.55.0

func NewAdminGenerateKey(
	walletStore WalletStore,
) *AdminGenerateKey

func (*AdminGenerateKey) Handle added in v0.55.0

Handle generates a key of the specified wallet.

type AdminGenerateKeyParams added in v0.55.0

type AdminGenerateKeyParams struct {
	Wallet     string            `json:"wallet"`
	Metadata   []wallet.Metadata `json:"metadata"`
	Passphrase string            `json:"passphrase"`
}

type AdminGenerateKeyResult added in v0.55.0

type AdminGenerateKeyResult struct {
	PublicKey string            `json:"publicKey"`
	Algorithm wallet.Algorithm  `json:"algorithm"`
	Metadata  []wallet.Metadata `json:"metadata"`
}

type AdminImportNetwork added in v0.55.0

type AdminImportNetwork struct {
	// contains filtered or unexported fields
}

func NewAdminImportNetwork added in v0.55.0

func NewAdminImportNetwork(
	networkStore NetworkStore,
) *AdminImportNetwork

func (*AdminImportNetwork) Handle added in v0.55.0

Handle creates a wallet and generates its first key.

type AdminImportNetworkParams added in v0.55.0

type AdminImportNetworkParams struct {
	Name      string `json:"name"`
	FilePath  string `json:"filePath"`
	URL       string `json:"url"`
	Overwrite bool   `json:"overwrite"`
}

type AdminImportNetworkResult added in v0.55.0

type AdminImportNetworkResult struct {
	Name     string `json:"name"`
	FilePath string `json:"filePath"`
}

type AdminImportWallet added in v0.55.0

type AdminImportWallet struct {
	// contains filtered or unexported fields
}

func NewAdminImportWallet added in v0.55.0

func NewAdminImportWallet(
	walletStore WalletStore,
) *AdminImportWallet

func (*AdminImportWallet) Handle added in v0.55.0

Handle creates a wallet and generates its first key.

type AdminImportWalletParams added in v0.55.0

type AdminImportWalletParams struct {
	Wallet         string `json:"wallet"`
	RecoveryPhrase string `json:"recoveryPhrase"`
	Version        uint32 `json:"version"`
	Passphrase     string `json:"passphrase"`
}

type AdminImportWalletResult added in v0.55.0

type AdminImportWalletResult struct {
	Wallet AdminImportedWallet `json:"wallet"`
	Key    AdminFirstPublicKey `json:"key"`
}

type AdminImportedWallet added in v0.55.0

type AdminImportedWallet struct {
	Name     string `json:"name"`
	Version  uint32 `json:"version"`
	FilePath string `json:"filePath"`
}

type AdminIsolateKey added in v0.55.0

type AdminIsolateKey struct {
	// contains filtered or unexported fields
}

func NewAdminIsolateKey added in v0.55.0

func NewAdminIsolateKey(
	walletStore WalletStore,
) *AdminIsolateKey

func (*AdminIsolateKey) Handle added in v0.55.0

Handle isolates a key in a specific wallet.

type AdminIsolateKeyParams added in v0.55.0

type AdminIsolateKeyParams struct {
	Wallet                   string `json:"wallet"`
	PublicKey                string `json:"publicKey"`
	Passphrase               string `json:"passphrase"`
	IsolatedWalletPassphrase string `json:"isolatedWalletPassphrase"`
}

type AdminIsolateKeyResult added in v0.55.0

type AdminIsolateKeyResult struct {
	Wallet   string `json:"wallet"`
	FilePath string `json:"filePath"`
}

type AdminLastBlockData added in v0.56.0

type AdminLastBlockData struct {
	ChainID                 string `json:"chainID"`
	BlockHeight             uint64 `json:"blockHeight"`
	BlockHash               string `json:"blockHash"`
	ProofOfWorkHashFunction string `json:"proofOfWorkHashFunction"`
	ProofOfWorkDifficulty   uint32 `json:"proofOfWorkDifficulty"`
}

type AdminListKeys added in v0.55.0

type AdminListKeys struct {
	// contains filtered or unexported fields
}

func NewAdminListKeys added in v0.55.0

func NewAdminListKeys(
	walletStore WalletStore,
) *AdminListKeys

func (*AdminListKeys) Handle added in v0.55.0

Handle list all the generated key from the specified wallet.

type AdminListKeysParams added in v0.55.0

type AdminListKeysParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

type AdminListKeysResult added in v0.55.0

type AdminListKeysResult struct {
	PublicKeys []AdminNamedPublicKey `json:"keys"`
}

type AdminListNetworks added in v0.55.0

type AdminListNetworks struct {
	// contains filtered or unexported fields
}

func NewAdminListNetworks added in v0.55.0

func NewAdminListNetworks(
	networkStore NetworkStore,
) *AdminListNetworks

func (*AdminListNetworks) Handle added in v0.55.0

Handle List all registered networks.

type AdminListNetworksResult added in v0.55.0

type AdminListNetworksResult struct {
	Networks []string `json:"networks"`
}

type AdminListPermissions added in v0.55.0

type AdminListPermissions struct {
	// contains filtered or unexported fields
}

func NewAdminListPermissions added in v0.55.0

func NewAdminListPermissions(
	walletStore WalletStore,
) *AdminListPermissions

func (*AdminListPermissions) Handle added in v0.55.0

Handle returns the permissions summary for all set hostnames.

type AdminListPermissionsParams added in v0.55.0

type AdminListPermissionsParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

type AdminListPermissionsResult added in v0.55.0

type AdminListPermissionsResult struct {
	Permissions map[string]wallet.PermissionsSummary `json:"permissions"`
}

type AdminListWallets added in v0.55.0

type AdminListWallets struct {
	// contains filtered or unexported fields
}

func NewAdminListWallets added in v0.55.0

func NewAdminListWallets(
	walletStore WalletStore,
) *AdminListWallets

func (*AdminListWallets) Handle added in v0.55.0

Handle list all the wallets present on the computer.

type AdminListWalletsResult added in v0.55.0

type AdminListWalletsResult struct {
	Wallets []string `json:"wallets"`
}

type AdminNamedPublicKey added in v0.55.0

type AdminNamedPublicKey struct {
	Name      string `json:"name"`
	PublicKey string `json:"publicKey"`
}

type AdminPurgePermissions added in v0.55.0

type AdminPurgePermissions struct {
	// contains filtered or unexported fields
}

func NewAdminPurgePermissions added in v0.55.0

func NewAdminPurgePermissions(
	walletStore WalletStore,
) *AdminPurgePermissions

func (*AdminPurgePermissions) Handle added in v0.55.0

Handle purges all the permissions set for all hostname.

type AdminPurgePermissionsParams added in v0.55.0

type AdminPurgePermissionsParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

type AdminRemoveNetwork added in v0.55.0

type AdminRemoveNetwork struct {
	// contains filtered or unexported fields
}

func NewAdminRemoveNetwork added in v0.55.0

func NewAdminRemoveNetwork(
	networkStore NetworkStore,
) *AdminRemoveNetwork

func (*AdminRemoveNetwork) Handle added in v0.55.0

Handle removes a wallet from the computer.

type AdminRemoveNetworkParams added in v0.55.0

type AdminRemoveNetworkParams struct {
	Network string `json:"network"`
}

type AdminRemoveWallet added in v0.55.0

type AdminRemoveWallet struct {
	// contains filtered or unexported fields
}

func NewAdminRemoveWallet added in v0.55.0

func NewAdminRemoveWallet(
	walletStore WalletStore,
) *AdminRemoveWallet

func (*AdminRemoveWallet) Handle added in v0.55.0

Handle removes a wallet from the computer.

type AdminRemoveWalletParams added in v0.55.0

type AdminRemoveWalletParams struct {
	Wallet string `json:"wallet"`
}

type AdminRenameWallet added in v0.60.0

type AdminRenameWallet struct {
	// contains filtered or unexported fields
}

func NewAdminRenameWallet added in v0.60.0

func NewAdminRenameWallet(
	walletStore WalletStore,
) *AdminRenameWallet

func (*AdminRenameWallet) Handle added in v0.60.0

Handle renames the wallet.

type AdminRenameWalletParams added in v0.60.0

type AdminRenameWalletParams struct {
	Wallet  string `json:"wallet"`
	NewName string `json:"newName"`
}

type AdminRevokePermissions added in v0.55.0

type AdminRevokePermissions struct {
	// contains filtered or unexported fields
}

func NewAdminRevokePermissions added in v0.55.0

func NewAdminRevokePermissions(
	walletStore WalletStore,
) *AdminRevokePermissions

func (*AdminRevokePermissions) Handle added in v0.55.0

Handle revokes the permissions set in the specified hostname.

type AdminRevokePermissionsParams added in v0.55.0

type AdminRevokePermissionsParams struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
	Hostname   string `json:"hostname"`
}

type AdminRotateKey added in v0.55.0

type AdminRotateKey struct {
	// contains filtered or unexported fields
}

func NewAdminRotateKey added in v0.55.0

func NewAdminRotateKey(
	walletStore WalletStore,
) *AdminRotateKey

func (*AdminRotateKey) Handle added in v0.55.0

Handle create a transaction to rotate the keys.

type AdminRotateKeyParams added in v0.55.0

type AdminRotateKeyParams struct {
	Wallet                string `json:"wallet"`
	Passphrase            string `json:"passphrase"`
	FromPublicKey         string `json:"fromPublicKey"`
	ToPublicKey           string `json:"toPublicKey"`
	ChainID               string `json:"chainID"`
	SubmissionBlockHeight uint64 `json:"submissionBlockHeight"`
	EnactmentBlockHeight  uint64 `json:"enactmentBlockHeight"`
}

type AdminRotateKeyResult added in v0.55.0

type AdminRotateKeyResult struct {
	MasterPublicKey    string `json:"masterPublicKey"`
	EncodedTransaction string `json:"encodedTransaction"`
}

type AdminSendTransaction added in v0.56.0

type AdminSendTransaction struct {
	// contains filtered or unexported fields
}

func NewAdminSendTransaction added in v0.56.0

func NewAdminSendTransaction(networkStore NetworkStore, nodeSelectorBuilder NodeSelectorBuilder) *AdminSendTransaction

func (*AdminSendTransaction) Handle added in v0.56.0

type AdminSendTransactionParams added in v0.56.0

type AdminSendTransactionParams struct {
	Network            string `json:"network"`
	NodeAddress        string `json:"nodeAddress"`
	Retries            uint64 `json:"retries"`
	SendingMode        string `json:"sendingMode"`
	EncodedTransaction string `json:"encodedTransaction"`
}

type AdminSendTransactionResult added in v0.56.0

type AdminSendTransactionResult struct {
	ReceivedAt time.Time               `json:"receivedAt"`
	SentAt     time.Time               `json:"sentAt"`
	TxHash     string                  `json:"transactionHash"`
	Tx         *commandspb.Transaction `json:"transaction"`
}

type AdminSignMessage added in v0.56.0

type AdminSignMessage struct {
	// contains filtered or unexported fields
}

func NewAdminSignMessage added in v0.56.0

func NewAdminSignMessage(walletStore WalletStore) *AdminSignMessage

func (*AdminSignMessage) Handle added in v0.56.0

type AdminSignMessageParams added in v0.56.0

type AdminSignMessageParams struct {
	Wallet         string `jso:"wallet"`
	Passphrase     string `json:"passphrase"`
	PubKey         string `json:"pubKey"`
	EncodedMessage string `json:"encodedMessage"`
}

type AdminSignMessageResult added in v0.56.0

type AdminSignMessageResult struct {
	Base64Signature string `json:"encodedSignature"`
}

type AdminSignTransaction added in v0.56.0

type AdminSignTransaction struct {
	// contains filtered or unexported fields
}

func NewAdminSignTransaction added in v0.56.0

func NewAdminSignTransaction(walletStore WalletStore, networkStore NetworkStore, nodeSelectorBuilder NodeSelectorBuilder) *AdminSignTransaction

func (*AdminSignTransaction) Handle added in v0.56.0

type AdminSignTransactionParams added in v0.56.0

type AdminSignTransactionParams struct {
	Wallet         string              `json:"wallet"`
	Passphrase     string              `json:"passphrase"`
	PublicKey      string              `json:"publicKey"`
	EncodedCommand string              `json:"encodedCommand"`
	Network        string              `json:"network"`
	LastBlockData  *AdminLastBlockData `json:"lastBlockData"`
}

type AdminSignTransactionResult added in v0.56.0

type AdminSignTransactionResult struct {
	Tx                 *commandspb.Transaction `json:"transaction"`
	EncodedTransaction string
}

type AdminTaintKey added in v0.55.0

type AdminTaintKey struct {
	// contains filtered or unexported fields
}

func NewAdminTaintKey added in v0.55.0

func NewAdminTaintKey(
	walletStore WalletStore,
) *AdminTaintKey

func (*AdminTaintKey) Handle added in v0.55.0

Handle marks the specified public key as tainted. It makes it unusable for transaction signing.

type AdminTaintKeyParams added in v0.55.0

type AdminTaintKeyParams struct {
	Wallet     string `json:"wallet"`
	PublicKey  string `json:"publicKey"`
	Passphrase string `json:"passphrase"`
}

type AdminUntaintKey added in v0.55.0

type AdminUntaintKey struct {
	// contains filtered or unexported fields
}

func NewAdminUntaintKey added in v0.55.0

func NewAdminUntaintKey(
	walletStore WalletStore,
) *AdminUntaintKey

func (*AdminUntaintKey) Handle added in v0.55.0

Handle marks the specified public key as tainted. It makes it unusable for transaction signing.

type AdminUntaintKeyParams added in v0.55.0

type AdminUntaintKeyParams struct {
	Wallet     string `json:"wallet"`
	PublicKey  string `json:"publicKey"`
	Passphrase string `json:"passphrase"`
}

type AdminUpdateNetwork added in v0.56.0

type AdminUpdateNetwork struct {
	// contains filtered or unexported fields
}

func NewAdminUpdateNetwork added in v0.56.0

func NewAdminUpdateNetwork(
	networkStore NetworkStore,
) *AdminUpdateNetwork

func (*AdminUpdateNetwork) Handle added in v0.56.0

Handle retrieve a wallet from its name and passphrase.

type AdminUpdateNetworkParams added in v0.56.0

type AdminUpdateNetworkParams struct {
	Name        string `json:"name"`
	Level       string `json:"logLevel"`
	TokenExpiry string `json:"tokenExpiry"`
	Port        int    `json:"port"`
	Host        string `json:"host"`
	API         struct {
		GRPCConfig struct {
			Hosts   []string `json:"hosts"`
			Retries uint64   `json:"retries"`
		} `json:"grpcConfig"`
		RESTConfig struct {
			Hosts []string `json:"hosts"`
		} `json:"restConfig"`
		GraphQLConfig struct {
			Hosts []string `json:"hosts"`
		} `json:"graphQLConfig"`
	} `json:"api"`
}

type AdminUpdatePassphrase added in v0.60.0

type AdminUpdatePassphrase struct {
	// contains filtered or unexported fields
}

func NewAdminUpdatePassphrase added in v0.60.0

func NewAdminUpdatePassphrase(
	walletStore WalletStore,
) *AdminUpdatePassphrase

func (*AdminUpdatePassphrase) Handle added in v0.60.0

Handle renames the wallet.

type AdminUpdatePassphraseParams added in v0.60.0

type AdminUpdatePassphraseParams struct {
	Wallet        string `json:"wallet"`
	Passphrase    string `json:"passphrase"`
	NewPassphrase string `json:"newPassphrase"`
}

type AdminUpdatePermissions added in v0.55.0

type AdminUpdatePermissions struct {
	// contains filtered or unexported fields
}

func NewAdminUpdatePermissions added in v0.55.0

func NewAdminUpdatePermissions(
	walletStore WalletStore,
) *AdminUpdatePermissions

func (*AdminUpdatePermissions) Handle added in v0.55.0

Handle revokes the permissions set in the specified hostname.

type AdminUpdatePermissionsParams added in v0.55.0

type AdminUpdatePermissionsParams struct {
	Wallet      string             `json:"wallet"`
	Passphrase  string             `json:"passphrase"`
	Hostname    string             `json:"hostname"`
	Permissions wallet.Permissions `json:"permissions"`
}

type AdminUpdatePermissionsResult added in v0.55.0

type AdminUpdatePermissionsResult struct {
	Permissions wallet.Permissions `json:"permissions"`
}

type AdminVerifyMessage added in v0.56.0

type AdminVerifyMessage struct{}

func NewAdminVerifyMessage added in v0.56.0

func NewAdminVerifyMessage() *AdminVerifyMessage

func (*AdminVerifyMessage) Handle added in v0.56.0

type AdminVerifyMessageParams added in v0.56.0

type AdminVerifyMessageParams struct {
	PubKey           string `json:"pubKey"`
	EncodedMessage   string `json:"encodedMessage"`
	EncodedSignature string `json:"encodedSignature"`
}

type AdminVerifyMessageResult added in v0.56.0

type AdminVerifyMessageResult struct {
	IsValid bool `json:"valid"`
}

type ClientConnectWallet added in v0.58.0

type ClientConnectWallet struct {
	// contains filtered or unexported fields
}

func NewConnectWallet

func NewConnectWallet(
	walletStore WalletStore,
	interactor Interactor,
	sessions *Sessions,
) *ClientConnectWallet

func (*ClientConnectWallet) Handle added in v0.58.0

Handle initiates the wallet connection between the API and a third-party application.

It triggers a selection of the wallet the client wants to use for this connection. The wallet is then loaded in memory. All changes done to that wallet will start in-memory, and then, be saved in the wallet file. Any changes done to the wallet outside the JSON-RPC session (via the command-line for example) will be overridden. For the effects to be taken into account, the wallet has to be disconnected first, and then re-connected.

All sessions have to be initialized by using this handler. Otherwise, a call to any other handlers will be rejected.

type ClientConnectWalletParams added in v0.58.0

type ClientConnectWalletParams struct {
	Hostname string `json:"hostname"`
}

type ClientConnectWalletResult added in v0.58.0

type ClientConnectWalletResult struct {
	Token string `json:"token"`
}

type ClientDisconnectWallet added in v0.58.0

type ClientDisconnectWallet struct {
	// contains filtered or unexported fields
}

func NewDisconnectWallet

func NewDisconnectWallet(sessions *Sessions) *ClientDisconnectWallet

func (*ClientDisconnectWallet) Handle added in v0.58.0

Handle disconnect a wallet for a third-party application.

It does not fail. If there's no connected wallet for the given token, nothing happens.

The wallet resources are unloaded.

type ClientDisconnectWalletParams added in v0.58.0

type ClientDisconnectWalletParams struct {
	Token string `json:"hostname"`
}

type ClientGetChainID added in v0.58.0

type ClientGetChainID struct {
	// contains filtered or unexported fields
}

func NewGetChainID added in v0.55.0

func NewGetChainID(nodeSelector walletnode.Selector) *ClientGetChainID

func (*ClientGetChainID) Handle added in v0.58.0

type ClientGetChainIDResult added in v0.58.0

type ClientGetChainIDResult struct {
	ChainID string `json:"chainID"`
}

type ClientGetPermissions added in v0.58.0

type ClientGetPermissions struct {
	// contains filtered or unexported fields
}

func NewGetPermissions

func NewGetPermissions(sessions *Sessions) *ClientGetPermissions

func (*ClientGetPermissions) Handle added in v0.58.0

Handle returns the permissions set on the given hostname.

If a third-party application does not have enough permissions, it has to request them using `request_permissions` handler.

Using this handler does not require permissions.

type ClientGetPermissionsParams added in v0.58.0

type ClientGetPermissionsParams struct {
	Token string `json:"token"`
}

type ClientGetPermissionsResult added in v0.58.0

type ClientGetPermissionsResult struct {
	Permissions wallet.PermissionsSummary `json:"permissions"`
}

type ClientListKeys added in v0.58.0

type ClientListKeys struct {
	// contains filtered or unexported fields
}

func NewListKeys

func NewListKeys(sessions *Sessions) *ClientListKeys

func (*ClientListKeys) Handle added in v0.58.0

Handle returns the public keys the third-party application has access to.

This requires a "read" access on "public_keys".

type ClientListKeysParams added in v0.58.0

type ClientListKeysParams struct {
	Token string `json:"token"`
}

type ClientListKeysResult added in v0.58.0

type ClientListKeysResult struct {
	Keys []ClientNamedPublicKey `json:"keys"`
}

type ClientNamedPublicKey added in v0.58.0

type ClientNamedPublicKey struct {
	Name      string `json:"name"`
	PublicKey string `json:"publicKey"`
}

type ClientParsedSendTransactionParams added in v0.58.0

type ClientParsedSendTransactionParams struct {
	Token          string
	PublicKey      string
	SendingMode    apipb.SubmitTransactionRequest_Type
	RawTransaction string
}

type ClientParsedSignTransactionParams added in v0.58.0

type ClientParsedSignTransactionParams struct {
	Token          string
	PublicKey      string
	RawTransaction string
}

type ClientRequestPermissions added in v0.58.0

type ClientRequestPermissions struct {
	// contains filtered or unexported fields
}

func NewRequestPermissions

func NewRequestPermissions(
	walletStore WalletStore,
	interactor Interactor,
	sessions *Sessions,
) *ClientRequestPermissions

func (*ClientRequestPermissions) Handle added in v0.58.0

Handle allows a third-party application to request permissions to access certain capabilities of the wallet.

To update the permissions, the third-party application has to specify all the permissions it required, even those that are already active. This way the client get a full understanding of all the requested access, and is much more capable to evaluate abusive requests and applications. Any permission that is omitted is considered to be revoked.

The client will be asked to review the permissions the third-party application is requesting. It has the possibility to approve or reject the request.

Everytime the permissions are updated, the connected wallet resources are updated.

Using this handler does not require permissions.

type ClientRequestPermissionsParams added in v0.58.0

type ClientRequestPermissionsParams struct {
	Token                string                    `json:"token"`
	RequestedPermissions wallet.PermissionsSummary `json:"requestedPermissions"`
}

type ClientRequestPermissionsResult added in v0.58.0

type ClientRequestPermissionsResult struct {
	Permissions wallet.PermissionsSummary `json:"permissions"`
}

type ClientSendTransaction added in v0.58.0

type ClientSendTransaction struct {
	// contains filtered or unexported fields
}

func NewSendTransaction

func NewSendTransaction(interactor Interactor, nodeSelector node.Selector, sessions *Sessions) *ClientSendTransaction

func (*ClientSendTransaction) Handle added in v0.58.0

type ClientSendTransactionParams added in v0.58.0

type ClientSendTransactionParams struct {
	Token              string `json:"token"`
	PublicKey          string `json:"publicKey"`
	SendingMode        string `json:"sendingMode"`
	EncodedTransaction string `json:"encodedTransaction"`
}

type ClientSendTransactionResult added in v0.58.0

type ClientSendTransactionResult struct {
	ReceivedAt time.Time               `json:"receivedAt"`
	SentAt     time.Time               `json:"sentAt"`
	TxHash     string                  `json:"transactionHash"`
	Tx         *commandspb.Transaction `json:"transaction"`
}

type ClientSignTransaction added in v0.58.0

type ClientSignTransaction struct {
	// contains filtered or unexported fields
}

func NewSignTransaction added in v0.55.0

func NewSignTransaction(interactor Interactor, nodeSelector node.Selector, sessions *Sessions) *ClientSignTransaction

func (*ClientSignTransaction) Handle added in v0.58.0

type ClientSignTransactionParams added in v0.58.0

type ClientSignTransactionParams struct {
	Token              string `json:"token"`
	PublicKey          string `json:"publicKey"`
	EncodedTransaction string `json:"encodedTransaction"`
}

type ClientSignTransactionResult added in v0.58.0

type ClientSignTransactionResult struct {
	Tx *commandspb.Transaction `json:"transaction"`
}

type ConnectedWallet

type ConnectedWallet struct {
	// Hostname is the hostname for which the connection is set.
	Hostname string
	// Wallet is the wallet selected by the client for this connection.
	Wallet wallet.Wallet
	// RestrictedKeys holds the keys that have been selected by the client
	// during the permissions request.
	RestrictedKeys map[string]wallet.KeyPair
}

ConnectedWallet contains the resources and the information of the current connection, required by the wallet handlers to work, and based on the permissions the client has set.

func NewConnectedWallet

func NewConnectedWallet(hostname string, w wallet.Wallet) (*ConnectedWallet, error)

func (*ConnectedWallet) CanUseKey added in v0.56.0

func (s *ConnectedWallet) CanUseKey(pubKey string) bool

CanUseKey determines is the permissions allow the specified key to be used, and ensure the key exist and is not tainted.

func (*ConnectedWallet) Permissions

func (s *ConnectedWallet) Permissions() wallet.Permissions

func (*ConnectedWallet) ReloadWithWallet

func (s *ConnectedWallet) ReloadWithWallet(updatedWallet wallet.Wallet) error

func (*ConnectedWallet) UpdatePermissions

func (s *ConnectedWallet) UpdatePermissions(perms wallet.Permissions) error

type ErrorType

type ErrorType string

ErrorType defines the type of error that is sent to the user, for fine grain error management and reporting.

var (
	// InternalError defines an unexpected technical error upon which the user
	// can't act.
	// The wallet front-end should report it to the user and automatically
	// abort the processing of the ongoing request.
	// It can be raised if a file is not accessible or corrupt, for example.
	InternalError ErrorType = "Internal error"
	// ServerError defines a programmatic error threw by the server, such as
	// a request cancellation. The server error targets error that happens in
	// the communication layer. It's different form application error.
	// It's a type of error that should be expected and handled.
	ServerError ErrorType = "Server error"
	// NetworkError defines an error that comes from the network and its nodes.
	NetworkError ErrorType = "Network error"
	// ApplicationError defines a programmatic error threw by the application
	// core, also called "business logic".
	ApplicationError ErrorType = "Application error"
	// UserError defines an error that originated from the user and that
	// requires its intervention to correct it.
	// It can be raised if a passphrase is invalid, for example.
	UserError ErrorType = "User error"
)

type Interactor added in v0.58.0

type Interactor interface {
	// NotifyInteractionSessionBegan notifies the beginning of an interaction
	// session.
	// A session is scoped to a request.
	NotifyInteractionSessionBegan(ctx context.Context, traceID string) error

	// NotifyInteractionSessionEnded notifies the end of an interaction
	// session.
	// A session is scoped to a request.
	NotifyInteractionSessionEnded(ctx context.Context, traceID string)

	// NotifySuccessfulTransaction is used to report a successful transaction.
	NotifySuccessfulTransaction(ctx context.Context, traceID, txHash, deserializedInputData, tx string, sentAt time.Time)

	// NotifyFailedTransaction is used to report a failed transaction.
	NotifyFailedTransaction(ctx context.Context, traceID, deserializedInputData, tx string, err error, sentAt time.Time)

	// NotifySuccessfulRequest is used to notify the user the request is
	// successful.
	NotifySuccessfulRequest(ctx context.Context, traceID string, message string)

	// NotifyError is used to report errors to the user.
	NotifyError(ctx context.Context, traceID string, t ErrorType, err error)

	// Log is used to report information of any kind to the user. This is used
	// to log internal activities and provide feedback to the wallet front-ends.
	// It's purely for informational purpose.
	// Receiving logs should be expected at any point during an interaction
	// session.
	Log(ctx context.Context, traceID string, t LogType, msg string)

	// RequestWalletConnectionReview is used to trigger a user review of
	// the wallet connection requested by the specified hostname.
	// It returns the type of connection approval chosen by the user.
	RequestWalletConnectionReview(ctx context.Context, traceID, hostname string) (string, error)

	// RequestWalletSelection is used to trigger the selection of the wallet the
	// user wants to use for the specified hostname.
	RequestWalletSelection(ctx context.Context, traceID, hostname string, availableWallets []string) (SelectedWallet, error)

	// RequestPassphrase is used to request to the user the passphrase of a wallet.
	// It's primarily used by requests that update the wallet.
	RequestPassphrase(ctx context.Context, traceID, wallet string) (string, error)

	// RequestPermissionsReview is used to trigger a user review of the permissions
	// requested by the specified hostname.
	// It returns true if the user approved the requested permissions, false
	// otherwise.
	RequestPermissionsReview(ctx context.Context, traceID, hostname, wallet string, perms map[string]string) (bool, error)

	// RequestTransactionReviewForSending is used to trigger a user review of the
	// transaction a third-party application wants to send.
	// It returns true if the user approved the sending of the transaction,
	// false otherwise.
	RequestTransactionReviewForSending(ctx context.Context, traceID, hostname, wallet, pubKey, transaction string, receivedAt time.Time) (bool, error)

	// RequestTransactionReviewForSigning is used to trigger a user review of the
	// transaction a third-party application wants to sign. The wallet doesn't
	// send the transaction.
	// It returns true if the user approved the signing of the transaction,
	// false otherwise.
	RequestTransactionReviewForSigning(ctx context.Context, traceID, hostname, wallet, pubKey, transaction string, receivedAt time.Time) (bool, error)
}

Interactor is the component in charge of delegating the JSON-RPC API requests, notifications and logs to the wallet front-end. Convention:

  • Notify* calls do not expect a response from the user.
  • Request* calls are expecting a response from the user.
  • Log function is just information logging and does not expect a response.

type LogType added in v0.56.0

type LogType string

LogType defines the type of log that is sent to the user.

var (
	InfoLog    LogType = "Info"
	WarningLog LogType = "Warning"
	ErrorLog   LogType = "Error"
	SuccessLog LogType = "Success"
)

type NetworkStore added in v0.55.0

type NetworkStore interface {
	NetworkExists(string) (bool, error)
	GetNetwork(string) (*network.Network, error)
	SaveNetwork(*network.Network) error
	ListNetworks() ([]string, error)
	GetNetworkPath(string) string
	DeleteNetwork(string) error
}

NetworkStore is the component used to retrieve and update the networks from the computer.

type NodeSelectorBuilder added in v0.56.0

type NodeSelectorBuilder func(hosts []string, retries uint64) (node.Selector, error)

type ParsedAdminSendTransactionParams added in v0.56.0

type ParsedAdminSendTransactionParams struct {
	Network        string
	NodeAddress    string
	Retries        uint64
	SendingMode    apipb.SubmitTransactionRequest_Type
	RawTransaction string
}

type ParsedAdminSignTransactionParams added in v0.56.0

type ParsedAdminSignTransactionParams struct {
	Wallet        string
	Passphrase    string
	PublicKey     string
	RawCommand    string
	Network       string
	LastBlockData *AdminLastBlockData
}

type Reader added in v0.55.0

type Reader func(uri string, net interface{}) error

type Readers added in v0.55.0

type Readers struct {
	ReadFromFile Reader
	ReadFromURL  Reader
}

func NewReaders added in v0.55.0

func NewReaders() Readers

type SelectedWallet

type SelectedWallet struct {
	Wallet     string `json:"wallet"`
	Passphrase string `json:"passphrase"`
}

SelectedWallet holds the result of the wallet selection from the user.

type Sessions

type Sessions struct {
	// contains filtered or unexported fields
}

func NewSessions

func NewSessions() *Sessions

func (*Sessions) ConnectWallet

func (s *Sessions) ConnectWallet(hostname string, w wallet.Wallet) (string, error)

ConnectWallet initiates a wallet connection and load associated resources in it. If a connection already exists, it's disconnected and a new token is generated.

func (*Sessions) DisconnectWallet

func (s *Sessions) DisconnectWallet(token string)

DisconnectWallet unloads the connected wallet resources and revokes the token. It does not fail. Non-existing token does nothing.

func (*Sessions) GetConnectedWallet

func (s *Sessions) GetConnectedWallet(token string) (*ConnectedWallet, error)

GetConnectedWallet retrieves the resources and information of the connected wallet, associated to the specified token.

type WalletStore

type WalletStore interface {
	WalletExists(ctx context.Context, name string) (bool, error)
	GetWallet(ctx context.Context, name, passphrase string) (wallet.Wallet, error)
	ListWallets(ctx context.Context) ([]string, error)
	SaveWallet(ctx context.Context, w wallet.Wallet, passphrase string) error
	DeleteWallet(ctx context.Context, name string) error
	RenameWallet(ctx context.Context, currentName, newName string) error
	GetWalletPath(name string) string
}

WalletStore is the component used to retrieve and update wallets from the computer.

Directories

Path Synopsis
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL