contract

package
v1.18.4 Latest Latest
Warning

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

Go to latest
Published: Mar 29, 2024 License: MIT Imports: 19 Imported by: 10

Documentation

Overview

Copyright (c) 2020-2022 Blockwatch Data Inc. Author: alex@blockwatch.cc

Index

Constants

View Source
const TOKEN_METADATA = "token_metadata"

Variables

This section is empty.

Functions

func DisableLog

func DisableLog()

DisableLog disables all library log output. Logging output is disabled by default until either UseLogger or SetLogWriter are called.

func UseLogger

func UseLogger(logger logpkg.Logger)

UseLogger uses a specified Logger to output package logging info. This should be used in preference to SetLogWriter if the caller is also using logpkg.

Types

type CallArguments

type CallArguments interface {
	WithSource(tezos.Address) CallArguments
	WithDestination(tezos.Address) CallArguments
	WithAmount(tezos.N) CallArguments
	Encode() *codec.Transaction
	Parameters() *micheline.Parameters
}

type Contract

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

func NewContract

func NewContract(addr tezos.Address, cli *rpc.Client) *Contract

func NewEmptyContract

func NewEmptyContract(cli *rpc.Client) *Contract

func (Contract) Address

func (c Contract) Address() tezos.Address

func (*Contract) AsFA1

func (c *Contract) AsFA1() *FA1Token

func (*Contract) AsFA2

func (c *Contract) AsFA2(id int64) *FA2Token

func (*Contract) Call

func (c *Contract) Call(ctx context.Context, args CallArguments, opts *rpc.CallOptions) (*rpc.Receipt, error)

func (*Contract) CallMulti

func (c *Contract) CallMulti(ctx context.Context, args []CallArguments, opts *rpc.CallOptions) (*rpc.Receipt, error)

func (*Contract) Client

func (c *Contract) Client() *rpc.Client

func (*Contract) DecodeScript

func (c *Contract) DecodeScript(data []byte) error

func (*Contract) DecodeStorage

func (c *Contract) DecodeStorage(data []byte) error

func (*Contract) Deploy

func (c *Contract) Deploy(ctx context.Context, opts *rpc.CallOptions) (*rpc.Receipt, error)

func (*Contract) DeployExt

func (c *Contract) DeployExt(ctx context.Context, delegate tezos.Address, balance tezos.N, opts *rpc.CallOptions) (*rpc.Receipt, error)

func (*Contract) Entrypoint

func (c *Contract) Entrypoint(name string) (micheline.Entrypoint, bool)

entrypoints and callbacks

func (*Contract) GetBigmapValue

func (c *Contract) GetBigmapValue(ctx context.Context, path string, args micheline.Prim) (*micheline.Value, error)

func (Contract) IsFA1

func (c Contract) IsFA1() bool

func (Contract) IsFA12

func (c Contract) IsFA12() bool

func (Contract) IsFA2

func (c Contract) IsFA2() bool

func (Contract) IsManagerTz

func (c Contract) IsManagerTz() bool

func (Contract) IsToken

func (c Contract) IsToken() bool

func (*Contract) Metadata

func (c *Contract) Metadata() *Tz16

func (*Contract) Reload

func (c *Contract) Reload(ctx context.Context) error

func (*Contract) Resolve

func (c *Contract) Resolve(ctx context.Context) error

func (*Contract) ResolveMetadata

func (c *Contract) ResolveMetadata(ctx context.Context) (*Tz16, error)

func (*Contract) ResolveTz16Uri

func (c *Contract) ResolveTz16Uri(ctx context.Context, uri string, result interface{}, checksum []byte) error

func (*Contract) RunCallback

func (c *Contract) RunCallback(ctx context.Context, name string, args micheline.Prim) (micheline.Prim, error)

Executes TZIP-4 callback-based views from callback entrypoints

func (*Contract) RunCallbackExt

func (c *Contract) RunCallbackExt(ctx context.Context, name string, args micheline.Prim, source, payer tezos.Address, gas int64) (micheline.Prim, error)

func (*Contract) RunView

func (c *Contract) RunView(ctx context.Context, name string, args micheline.Prim) (micheline.Prim, error)

Executes on-chain views from callback entrypoints

func (*Contract) RunViewExt

func (c *Contract) RunViewExt(ctx context.Context, name string, args micheline.Prim, source, payer tezos.Address, gas int64) (micheline.Prim, error)

func (Contract) Script

func (c Contract) Script() *micheline.Script

func (Contract) Storage

func (c Contract) Storage() *micheline.Prim

func (Contract) StorageValue

func (c Contract) StorageValue() micheline.Value

func (Contract) TokenKind

func (c Contract) TokenKind() TokenKind

func (*Contract) View

func (c *Contract) View(name string) (micheline.View, bool)

on-chain views

func (*Contract) WithScript

func (c *Contract) WithScript(script *micheline.Script) *Contract

func (*Contract) WithStorage

func (c *Contract) WithStorage(store *micheline.Prim) *Contract

type FA1Approval

type FA1Approval struct {
	Spender tezos.Address `json:"spender"`
	Value   tezos.Z       `json:"value"`
}

type FA1ApprovalArgs

type FA1ApprovalArgs struct {
	TxArgs
	Approval FA1Approval `json:"approve"`
}

func NewFA1ApprovalArgs

func NewFA1ApprovalArgs() *FA1ApprovalArgs

func (*FA1ApprovalArgs) Approve

func (p *FA1ApprovalArgs) Approve(spender tezos.Address, amount tezos.Z) *FA1ApprovalArgs

func (FA1ApprovalArgs) Encode

func (p FA1ApprovalArgs) Encode() *codec.Transaction

func (FA1ApprovalArgs) Parameters

func (a FA1ApprovalArgs) Parameters() *micheline.Parameters

func (*FA1ApprovalArgs) Revoke

func (p *FA1ApprovalArgs) Revoke(spender tezos.Address) *FA1ApprovalArgs

func (*FA1ApprovalArgs) WithDestination

func (a *FA1ApprovalArgs) WithDestination(addr tezos.Address) CallArguments

func (*FA1ApprovalArgs) WithSource

func (a *FA1ApprovalArgs) WithSource(addr tezos.Address) CallArguments

type FA1Token

type FA1Token struct {
	Address tezos.Address
	// contains filtered or unexported fields
}

Represents a generic FA1 (tzip5) or FA1.2 (tzip7) token

func NewFA1Token

func NewFA1Token(addr tezos.Address, cli *rpc.Client) *FA1Token

func (FA1Token) Approve

func (t FA1Token) Approve(spender tezos.Address, amount tezos.Z) CallArguments

func (FA1Token) Contract

func (t FA1Token) Contract() *Contract

func (FA1Token) Equal

func (t FA1Token) Equal(v FA1Token) bool

func (FA1Token) GetAllowance

func (t FA1Token) GetAllowance(ctx context.Context, owner, spender tezos.Address) (tezos.Z, error)

func (FA1Token) GetBalance

func (t FA1Token) GetBalance(ctx context.Context, owner tezos.Address) (tezos.Z, error)

func (FA1Token) GetTotalSupply

func (t FA1Token) GetTotalSupply(ctx context.Context) (tezos.Z, error)

func (FA1Token) ResolveMetadata

func (t FA1Token) ResolveMetadata(ctx context.Context) (*TokenMetadata, error)

func (FA1Token) Revoke

func (t FA1Token) Revoke(spender tezos.Address) CallArguments

func (FA1Token) Transfer

func (t FA1Token) Transfer(from, to tezos.Address, amount tezos.Z) CallArguments

type FA1Transfer

type FA1Transfer struct {
	From   tezos.Address `json:"from"`
	To     tezos.Address `json:"to"`
	Amount tezos.Z       `json:"value"`
}

func (*FA1Transfer) UnmarshalJSON

func (t *FA1Transfer) UnmarshalJSON(data []byte) error

compatible with micheline.Value.Unmarshal()

type FA1TransferArgs

type FA1TransferArgs struct {
	TxArgs
	Transfer FA1Transfer
}

func NewFA1TransferArgs

func NewFA1TransferArgs() *FA1TransferArgs

func (FA1TransferArgs) Encode

func (p FA1TransferArgs) Encode() *codec.Transaction

func (FA1TransferArgs) Parameters

func (t FA1TransferArgs) Parameters() *micheline.Parameters

func (*FA1TransferArgs) WithDestination

func (a *FA1TransferArgs) WithDestination(addr tezos.Address) CallArguments

func (*FA1TransferArgs) WithSource

func (a *FA1TransferArgs) WithSource(addr tezos.Address) CallArguments

func (*FA1TransferArgs) WithTransfer

func (p *FA1TransferArgs) WithTransfer(from, to tezos.Address, amount tezos.Z) *FA1TransferArgs

type FA1TransferReceipt

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

func NewFA1TransferReceipt

func NewFA1TransferReceipt(tx *rpc.Transaction) (*FA1TransferReceipt, error)

func (FA1TransferReceipt) BalanceUpdates

func (r FA1TransferReceipt) BalanceUpdates() []TokenBalance

func (FA1TransferReceipt) Costs

func (r FA1TransferReceipt) Costs() tezos.Costs

func (FA1TransferReceipt) IsSuccess

func (r FA1TransferReceipt) IsSuccess() bool

func (FA1TransferReceipt) Request

func (r FA1TransferReceipt) Request() FA1Transfer

func (FA1TransferReceipt) Result

func (r FA1TransferReceipt) Result() *rpc.Transaction

type FA2Approval

type FA2Approval struct {
	Owner    tezos.Address `json:"owner"`
	Operator tezos.Address `json:"operator"`
	TokenId  tezos.Z       `json:"token_id"`
	Add      bool          `json:"-"`
}

func (*FA2Approval) UnmarshalJSON

func (p *FA2Approval) UnmarshalJSON(data []byte) error

type FA2ApprovalArgs

type FA2ApprovalArgs struct {
	TxArgs
	Approvals []FA2Approval `json:"update_operators"`
}

func NewFA2ApprovalArgs

func NewFA2ApprovalArgs() *FA2ApprovalArgs

func (*FA2ApprovalArgs) AddOperator

func (p *FA2ApprovalArgs) AddOperator(owner, operator tezos.Address, id tezos.Z) *FA2ApprovalArgs

func (FA2ApprovalArgs) Encode

func (p FA2ApprovalArgs) Encode() *codec.Transaction

func (FA2ApprovalArgs) Parameters

func (p FA2ApprovalArgs) Parameters() *micheline.Parameters

func (*FA2ApprovalArgs) RemoveOperator

func (p *FA2ApprovalArgs) RemoveOperator(owner, operator tezos.Address, id tezos.Z) *FA2ApprovalArgs

func (*FA2ApprovalArgs) WithDestination

func (a *FA2ApprovalArgs) WithDestination(addr tezos.Address) CallArguments

func (*FA2ApprovalArgs) WithSource

func (a *FA2ApprovalArgs) WithSource(addr tezos.Address) CallArguments

type FA2BalanceRequest

type FA2BalanceRequest struct {
	Owner   tezos.Address `json:"owner"`
	TokenId tezos.Z       `json:"token_id"`
}

type FA2BalanceResponse

type FA2BalanceResponse struct {
	Request FA2BalanceRequest `json:"request"`
	Balance tezos.Z           `json:"balance"`
}

type FA2Token

type FA2Token struct {
	Address tezos.Address
	TokenId tezos.Z
	// contains filtered or unexported fields
}

Represents a generic FA2 (tzip12) token

func NewFA2Token

func NewFA2Token(addr tezos.Address, id int64, cli *rpc.Client) *FA2Token

func (FA2Token) AddOperator

func (t FA2Token) AddOperator(owner, operator tezos.Address) CallArguments

func (FA2Token) Contract

func (t FA2Token) Contract() *Contract

func (FA2Token) Equal

func (t FA2Token) Equal(v FA2Token) bool

func (FA2Token) GetBalance

func (t FA2Token) GetBalance(ctx context.Context, owner tezos.Address) (tezos.Z, error)

func (FA2Token) GetBalances

func (t FA2Token) GetBalances(ctx context.Context, req []FA2BalanceRequest) ([]FA2BalanceResponse, error)

func (FA2Token) RemoveOperator

func (t FA2Token) RemoveOperator(owner, operator tezos.Address) CallArguments

func (FA2Token) ResolveMetadata

func (t FA2Token) ResolveMetadata(ctx context.Context) (*TokenMetadata, error)

func (FA2Token) Transfer

func (t FA2Token) Transfer(from, to tezos.Address, amount tezos.Z) CallArguments

type FA2Transfer

type FA2Transfer struct {
	From    tezos.Address
	To      tezos.Address
	TokenId tezos.Z
	Amount  tezos.Z
}

func (FA2Transfer) Prim

func (t FA2Transfer) Prim() micheline.Prim

type FA2TransferArgs

type FA2TransferArgs struct {
	TxArgs
	Transfers FA2TransferList
}

func NewFA2TransferArgs

func NewFA2TransferArgs() *FA2TransferArgs

func (FA2TransferArgs) Encode

func (p FA2TransferArgs) Encode() *codec.Transaction

func (*FA2TransferArgs) Optimize

func (p *FA2TransferArgs) Optimize() *FA2TransferArgs

func (FA2TransferArgs) Parameters

func (t FA2TransferArgs) Parameters() *micheline.Parameters

func (*FA2TransferArgs) WithDestination

func (a *FA2TransferArgs) WithDestination(addr tezos.Address) CallArguments

func (*FA2TransferArgs) WithSource

func (a *FA2TransferArgs) WithSource(addr tezos.Address) CallArguments

func (*FA2TransferArgs) WithTransfer

func (p *FA2TransferArgs) WithTransfer(from, to tezos.Address, id, amount tezos.Z) *FA2TransferArgs

type FA2TransferList

type FA2TransferList []FA2Transfer

func (FA2TransferList) Len

func (l FA2TransferList) Len() int

func (FA2TransferList) Less

func (l FA2TransferList) Less(i, j int) bool

func (FA2TransferList) Swap

func (l FA2TransferList) Swap(i, j int)

func (*FA2TransferList) UnmarshalJSON

func (t *FA2TransferList) UnmarshalJSON(data []byte) error

compatible with micheline.Value.Unmarshal()

type FA2TransferReceipt

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

TODO: make it work for internal results as well (so we can use it for crawling)

func NewFA2TransferReceipt

func NewFA2TransferReceipt(tx *rpc.Transaction) (*FA2TransferReceipt, error)

func (FA2TransferReceipt) BalanceUpdates

func (r FA2TransferReceipt) BalanceUpdates() []TokenBalance

func (FA2TransferReceipt) Costs

func (r FA2TransferReceipt) Costs() tezos.Costs

func (FA2TransferReceipt) IsSuccess

func (r FA2TransferReceipt) IsSuccess() bool

func (FA2TransferReceipt) Request

func (r FA2TransferReceipt) Request() FA2TransferList

func (FA2TransferReceipt) Result

func (r FA2TransferReceipt) Result() *rpc.Transaction

type NftLedger

type NftLedger struct {
	Address    tezos.Address
	Schema     NftLedgerSchema
	Bigmap     int64
	FirstBlock int64
}

func (NftLedger) DecodeEntry

func (l NftLedger) DecodeEntry(prim micheline.Prim) (bal NftLedgerEntry, err error)

type NftLedger1

type NftLedger1 NftLedgerEntry

1 @key: {0: address, 1: nat} @value: nat

func (*NftLedger1) UnmarshalPrim

func (b *NftLedger1) UnmarshalPrim(prim micheline.Prim) error

type NftLedgerEntry

type NftLedgerEntry struct {
	Owner   tezos.Address
	TokenId tezos.Z
	Balance tezos.Z
	// contains filtered or unexported fields
}

func (*NftLedgerEntry) UnmarshalPrim

func (b *NftLedgerEntry) UnmarshalPrim(prim micheline.Prim) error

type NftLedgerSchema

type NftLedgerSchema byte
const (
	NftLedgerSchemaInvalid NftLedgerSchema = iota
	NftLedgerSchema1
	NftLedgerSchema2
	NftLedgerSchema3
)

func DetectNftLedger

func DetectNftLedger(key, val micheline.Prim) NftLedgerSchema

Detect NFT legder schema from bigmap key + value type.

func (NftLedgerSchema) IsValid

func (s NftLedgerSchema) IsValid() bool

type NftLedgerTyp2

type NftLedgerTyp2 NftLedgerEntry

2 @key: nat @value: address

func (*NftLedgerTyp2) UnmarshalPrim

func (b *NftLedgerTyp2) UnmarshalPrim(prim micheline.Prim) error

type NftLedgerTyp3

type NftLedgerTyp3 NftLedgerEntry

3 @key: {0: nat, 1: address} @value: nat

func (*NftLedgerTyp3) UnmarshalPrim

func (b *NftLedgerTyp3) UnmarshalPrim(prim micheline.Prim) error

type TokenBalance

type TokenBalance struct {
	Owner   tezos.Address
	Token   tezos.Address
	TokenId tezos.Z
	Balance tezos.Z
}

type TokenKind

type TokenKind byte
const (
	TokenKindInvalid TokenKind = iota
	TokenKindTez
	TokenKindFA1
	TokenKindFA1_2
	TokenKindFA2
	TokenKindNFT
	TokenKindNoView
)

func (TokenKind) IsValid

func (k TokenKind) IsValid() bool

func (TokenKind) String

func (k TokenKind) String() string

type TokenMetadata

type TokenMetadata struct {
	// TZip12 normative (only decimals is required)
	Name     string `json:"name"`
	Symbol   string `json:"symbol"`
	Decimals int    `json:"decimals"`

	// Tzip21
	Description        string          `json:"description,omitempty"`
	ShouldPreferSymbol bool            `json:"shouldPreferSymbol,omitempty"`
	IsBooleanAmount    bool            `json:"isBooleanAmount,omitempty"`
	IsTransferable     bool            `json:"isTransferable,omitempty"`
	ArtifactUri        string          `json:"artifactUri,omitempty"`
	DisplayUri         string          `json:"displayUri,omitempty"`
	ThumbnailUri       string          `json:"thumbnailUri,omitempty"`
	Minter             string          `json:"minter,omitempty"`
	Creators           []string        `json:"creators,omitempty"`
	Contributors       []string        `json:"contributors,omitempty"`
	Publishers         []string        `json:"publishers,omitempty"`
	Date               time.Time       `json:"date,omitempty"`
	Type               string          `json:"type,omitempty"`
	Tags               []string        `json:"tags,omitempty"`
	Genres             []string        `json:"genres,omitempty"`
	Language           string          `json:"language,omitempty"`
	Identifier         string          `json:"identifier,omitempty"`
	Rights             string          `json:"rights,omitempty"`
	RightUri           string          `json:"rightUri,omitempty"`
	ExternalUri        string          `json:"externalUri,omitempty"`
	Formats            []Tz21Format    `json:"formats,omitempty"`
	Attributes         []Tz21Attribute `json:"attributes,omitempty"`
	// contains filtered or unexported fields
}

Represents Tzip12 token metadata used by FA1 and FA2 tokens mixed with TZip21 metadata for NFTs

func ResolveTokenMetadata

func ResolveTokenMetadata(ctx context.Context, contract *Contract, tokenid tezos.Z) (*TokenMetadata, error)

func (TokenMetadata) Raw

func (t TokenMetadata) Raw() []byte

func (TokenMetadata) URI

func (t TokenMetadata) URI() string

func (*TokenMetadata) UnmarshalJSON

func (t *TokenMetadata) UnmarshalJSON(data []byte) error

func (*TokenMetadata) UnmarshalPrim

func (t *TokenMetadata) UnmarshalPrim(prim micheline.Prim) error

(pair (nat %token_id) (map %token_info string bytes))

type TxArgs

type TxArgs struct {
	Source      tezos.Address
	Destination tezos.Address
	Amount      tezos.N
	Params      micheline.Parameters
}

func NewTxArgs

func NewTxArgs() *TxArgs

func (*TxArgs) Encode

func (a *TxArgs) Encode() *codec.Transaction

func (*TxArgs) Parameters

func (a *TxArgs) Parameters() *micheline.Parameters

func (*TxArgs) WithAmount

func (a *TxArgs) WithAmount(amount tezos.N) CallArguments

func (*TxArgs) WithDestination

func (a *TxArgs) WithDestination(addr tezos.Address) CallArguments

func (*TxArgs) WithParameters

func (a *TxArgs) WithParameters(params micheline.Parameters)

func (*TxArgs) WithSource

func (a *TxArgs) WithSource(addr tezos.Address) CallArguments

type Tz16

type Tz16 struct {
	Name        string       `json:"name"`
	Description string       `json:"description,omitempty"`
	Version     string       `json:"version,omitempty"`
	License     *Tz16License `json:"license,omitempty"`
	Authors     []string     `json:"authors,omitempty"`
	Homepage    string       `json:"homepage,omitempty"`
	Source      *Tz16Source  `json:"source,omitempty"`
	Interfaces  []string     `json:"interfaces,omitempty"`
	Errors      []Tz16Error  `json:"errors,omitempty"`
	Views       []Tz16View   `json:"views,omitempty"`
}

Represents Tzip16 contract metadata

func (Tz16) GetView

func (t Tz16) GetView(name string) Tz16View

func (Tz16) HasView

func (t Tz16) HasView(name string) bool

func (Tz16) Validate

func (t Tz16) Validate() []error

type Tz16CodeAnnotation

type Tz16CodeAnnotation struct {
	Name        string `json:"name"`
	Description string `json:"description"`
}

type Tz16Error

type Tz16Error struct {
	Error     *micheline.Prim `json:"error,omitempty"`
	Expansion *micheline.Prim `json:"expansion,omitempty"`
	Languages []string        `json:"languages,omitempty"`
	View      string          `json:"view,omitempty"`
}

type Tz16License

type Tz16License struct {
	Name    string `json:"name"`
	Details string `json:"details,omitempty"`
}

func (*Tz16License) UnmarshalJSON

func (l *Tz16License) UnmarshalJSON(data []byte) error

type Tz16RestView

type Tz16RestView struct {
	SpecUri string `json:"specificationUri"`
	BaseUri string `json:"baseUri"`
	Path    string `json:"path"`
	Method  string `json:"method"`
}

type Tz16Source

type Tz16Source struct {
	Tools    []string `json:"tools"`
	Location string   `json:"location,omitempty"`
}

type Tz16StorageView

type Tz16StorageView struct {
	ParamType   micheline.Prim       `json:"parameter"`
	ReturnType  micheline.Prim       `json:"returnType"`
	Code        micheline.Prim       `json:"code"`
	Annotations []Tz16CodeAnnotation `json:"annotations,omitempty"`
	Version     string               `json:"version,omitempty"`
}

func (*Tz16StorageView) Run

func (v *Tz16StorageView) Run(ctx context.Context, contract *Contract, args micheline.Prim) (micheline.Prim, error)

Run executes the TZIP-16 off-chain view using script and storage from contract and passed args. Returns the result as primitive which matches the view's return type. Note this method does not check or patch the view code to replace illegal instructions or inject current context.

type Tz16View

type Tz16View struct {
	Name            string         `json:"name"`
	Description     string         `json:"description,omitempty"`
	Pure            bool           `json:"pure,omitempty"`
	Implementations []Tz16ViewImpl `json:"implementations,omitempty"`
}

func (*Tz16View) Run

func (v *Tz16View) Run(ctx context.Context, contract *Contract, args micheline.Prim) (micheline.Prim, error)

type Tz16ViewImpl

type Tz16ViewImpl struct {
	Storage *Tz16StorageView `json:"michelsonStorageView,omitempty"`
	Rest    *Tz16RestView    `json:"restApiQuery,omitempty"`
}

type Tz21Attribute

type Tz21Attribute struct {
	Name  string `json:"name"`
	Value string `json:"value"`
	Type  string `json:"type,omitempty"`
}

type Tz21DataRate

type Tz21DataRate struct {
	Value string `json:"value"`
	Unit  string `json:"unit"`
}

type Tz21Dimension

type Tz21Dimension struct {
	Value string `json:"value"`
	Unit  string `json:"unit"`
}

type Tz21Format

type Tz21Format struct {
	Uri        string        `json:"uri"`
	Hash       string        `json:"hash"`
	MimeType   string        `json:"mimeType"`
	FileSize   int64         `json:"fileSize"`
	FileName   string        `json:"fileName"`
	Duration   string        `json:"duration"`
	Dimensions Tz21Dimension `json:"dimensions"`
	DataRate   Tz21DataRate  `json:"dataRate"`
}

Directories

Path Synopsis
Package bind contains utility functions and types that are used by generated contract code.
Package bind contains utility functions and types that are used by generated contract code.

Jump to

Keyboard shortcuts

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