Documentation ¶
Index ¶
- Constants
- Variables
- func GetUsedAddress(api *API, seed Trytes, security int) (Address, []Address, error)
- func IsValidSig(expectedAddress Address, signatureFragments []Trytes, bundleHash Trytes) bool
- func IsValidTrit(t int8) error
- func IsValidTryte(t rune) error
- func Promote(api *API, tail Trytes, depth int64, trytes []Transaction, mwm int64, ...) error
- func RandomNode() string
- func SendTrytes(api *API, depth int64, trytes []Transaction, mwm int64, pow PowFunc) error
- func ToString(t Trytes) string
- type API
- func (api *API) AddNeighbors(uris []string) (*AddNeighborsResponse, error)
- func (api *API) AttachToTangle(att *AttachToTangleRequest) (*AttachToTangleResponse, error)
- func (api *API) Balances(adr []Address) (Balances, error)
- func (api *API) BroadcastTransactions(trytes []Transaction) error
- func (api *API) CheckConsistency(tails []Trytes) (*CheckConsistencyResponse, error)
- func (api *API) FindTransactions(ft *FindTransactionsRequest) (*FindTransactionsResponse, error)
- func (api *API) GetBalances(adr []Address, threshold int64) (*GetBalancesResponse, error)
- func (api *API) GetInclusionStates(tx []Trytes, tips []Trytes) (*GetInclusionStatesResponse, error)
- func (api *API) GetLatestInclusion(hash []Trytes) ([]bool, error)
- func (api *API) GetNeighbors() (*GetNeighborsResponse, error)
- func (api *API) GetNodeInfo() (*GetNodeInfoResponse, error)
- func (api *API) GetTips() (*GetTipsResponse, error)
- func (api *API) GetTransactionsToApprove(depth, numWalks int64, reference Trytes) (*GetTransactionsToApproveResponse, error)
- func (api *API) GetTrytes(hashes []Trytes) (*GetTrytesResponse, error)
- func (api *API) InterruptAttachingToTangle() error
- func (api *API) RemoveNeighbors(uris []string) (*RemoveNeighborsResponse, error)
- func (api *API) StoreTransactions(trytes []Transaction) error
- type AddNeighborsRequest
- type AddNeighborsResponse
- type Address
- type AddressInfo
- type AttachToTangleRequest
- type AttachToTangleResponse
- type Balance
- type Balances
- type BroadcastTransactionsRequest
- type Bundle
- type CheckConsistencyResponse
- type Curl
- type ErrorResponse
- type FindTransactionsRequest
- type FindTransactionsResponse
- type GetBalancesRequest
- type GetBalancesResponse
- type GetInclusionStatesRequest
- type GetInclusionStatesResponse
- type GetNeighborsRequest
- type GetNeighborsResponse
- type GetNodeInfoRequest
- type GetNodeInfoResponse
- type GetTipsRequest
- type GetTipsResponse
- type GetTransactionsToApproveRequest
- type GetTransactionsToApproveResponse
- type GetTrytesRequest
- type GetTrytesResponse
- type InterruptAttachingToTangleRequest
- type Kerl
- type Neighbor
- type PowFunc
- type RemoveNeighborsRequest
- type RemoveNeighborsResponse
- type StoreTransactionsRequest
- type Transaction
- type Transfer
- type Trits
- type Trytes
- func FromString(s string) (Trytes, error)
- func NewKey(seed Trytes, index, securityLevel int) (Trytes, error)
- func NewSeed() Trytes
- func PowC(trytes Trytes, mwm int) (Trytes, error)
- func PowGo(trytes Trytes, mwm int) (Trytes, error)
- func PowSSE(trytes Trytes, mwm int) (Trytes, error)
- func Sign(normalizedBundleFragment []int8, keyFragment Trytes) Trytes
- func ToTrytes(t string) (Trytes, error)
Constants ¶
const ( TryteAlphabet = "9ABCDEFGHIJKLMNOPQRSTUVWXYZ" MinTryteValue = -13 MaxTryteValue = 13 SignatureSize = 6561 HashSize = 243 Depth = 3 Radix = 3 DefaultMinWeightMagnitude = 14 )
Various constants for giota.
const ( Ki = 1000 Mi = 1000000 Gi = 1000000000 Ti = 1000000000000 Pi = 1000000000000000 )
Units for iota token.
const ( SignatureMessageFragmentTrinaryOffset = 0 SignatureMessageFragmentTrinarySize = 6561 AddressTrinaryOffset = SignatureMessageFragmentTrinaryOffset + SignatureMessageFragmentTrinarySize AddressTrinarySize = 243 ValueTrinaryOffset = AddressTrinaryOffset + AddressTrinarySize ValueTrinarySize = 81 ObsoleteTagTrinaryOffset = ValueTrinaryOffset + ValueTrinarySize ObsoleteTagTrinarySize = 81 TimestampTrinaryOffset = ObsoleteTagTrinaryOffset + ObsoleteTagTrinarySize TimestampTrinarySize = 27 CurrentIndexTrinaryOffset = TimestampTrinaryOffset + TimestampTrinarySize CurrentIndexTrinarySize = 27 LastIndexTrinaryOffset = CurrentIndexTrinaryOffset + CurrentIndexTrinarySize LastIndexTrinarySize = 27 BundleTrinaryOffset = LastIndexTrinaryOffset + LastIndexTrinarySize BundleTrinarySize = 243 TrunkTransactionTrinaryOffset = BundleTrinaryOffset + BundleTrinarySize TrunkTransactionTrinarySize = 243 BranchTransactionTrinaryOffset = TrunkTransactionTrinaryOffset + TrunkTransactionTrinarySize BranchTransactionTrinarySize = 243 TagTrinaryOffset = BranchTransactionTrinaryOffset + BranchTransactionTrinarySize TagTrinarySize = 81 AttachmentTimestampTrinaryOffset = TagTrinaryOffset + TagTrinarySize AttachmentTimestampTrinarySize = 27 AttachmentTimestampLowerBoundTrinaryOffset = AttachmentTimestampTrinaryOffset + AttachmentTimestampTrinarySize AttachmentTimestampLowerBoundTrinarySize = 27 AttachmentTimestampUpperBoundTrinaryOffset = AttachmentTimestampLowerBoundTrinaryOffset + AttachmentTimestampLowerBoundTrinarySize AttachmentTimestampUpperBoundTrinarySize = 27 NonceTrinaryOffset = AttachmentTimestampUpperBoundTrinaryOffset + AttachmentTimestampUpperBoundTrinarySize NonceTrinarySize = 81 )
Trinary sizes and offsets of a transaction
const ( ByteLength = 48 TritHashLength = 243 IntLength = ByteLength / 4 )
constants regarding byte and trit lengths
const DefaultNumberOfWalks = 5
Number of random walks to perform. Currently IRI defaults to a range of 5 to 27
Variables ¶
var ( // EmptyHash represents an empty hash. EmptyHash Trytes = "999999999999999999999999999999999999999999999999999999999999999999999999999999999" // EmptyAddress represents an empty address. EmptyAddress Address = "999999999999999999999999999999999999999999999999999999999999999999999999999999999" )
var ( ErrSeedTritsLength = errors.New("seed trit slice should be HashSize entries long") ErrSeedTrytesLength = errors.New("seed string needs to be HashSize / 3 characters long") ErrKeyTritsLength = errors.New("key trit slice should be a multiple of HashSize*27 entries long") )
errors used in sign
var ( ErrInvalidAddressTrytes = errors.New("addresses without checksum are 81 trytes in length") ErrInvalidAddressTrits = errors.New("addresses without checksum are 243 trits in length") )
Error types for address
var ( ErrInvalidTransactionType = errors.New("invalid transaction type") ErrInvalidTransactionHash = errors.New("invalid transaction hash") ErrInvalidTransaction = errors.New("malformed transaction") )
errors for tx
var ( // PowProcs is number of concurrent processes (default is NumCPU()-1) PowProcs int )
var (
PublicNodes = []string{
"http://service.iotasupport.com:14265",
"http://eugene.iota.community:14265",
"http://eugene.iotasupport.com:14999",
"http://eugeneoldisoft.iotasupport.com:14265",
"http://mainnet.necropaz.com:14500",
"http://iotatoken.nl:14265",
"http://iota.digits.blue:14265",
"http://wallets.iotamexico.com:80",
"http://5.9.137.199:14265",
"http://5.9.118.112:14265",
"http://5.9.149.169:14265",
"http://88.198.230.98:14265",
"http://176.9.3.149:14265",
"http://iota.bitfinex.com:80",
}
)
PublicNodes is a list of known public nodes from http://iotasupport.com/lightwallet.shtml.
Functions ¶
func GetUsedAddress ¶
GetUsedAddress generates a new address which is not found in the tangle and returns its new address and used addresses.
func IsValidSig ¶
IsValidSig validates signatureFragment.
func IsValidTryte ¶
IsValidTryte returns the validity of a tryte( must be rune A-Z or 9 )
func Promote ¶
func Promote(api *API, tail Trytes, depth int64, trytes []Transaction, mwm int64, pow PowFunc) error
Promote sends transanction using tail as reference (promotes the tail transaction)
func RandomNode ¶
func RandomNode() string
RandomNode returns a random node from PublicNodes. If local IRI exists, return localhost address.
func SendTrytes ¶
SendTrytes does attachToTangle and finally, it broadcasts the transactions.
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
API is for calling APIs.
func NewAPI ¶
NewAPI takes an (optional) endpoint and optional http.Client and returns an API struct. If an empty endpoint is supplied, then "http://localhost:14265" is used.
func (*API) AddNeighbors ¶
func (api *API) AddNeighbors(uris []string) (*AddNeighborsResponse, error)
AddNeighbors calls AddNeighbors API.
func (*API) AttachToTangle ¶
func (api *API) AttachToTangle(att *AttachToTangleRequest) (*AttachToTangleResponse, error)
AttachToTangle calls AttachToTangle API.
func (*API) BroadcastTransactions ¶
func (api *API) BroadcastTransactions(trytes []Transaction) error
BroadcastTransactions calls BroadcastTransactions API.
func (*API) CheckConsistency ¶
func (api *API) CheckConsistency(tails []Trytes) (*CheckConsistencyResponse, error)
CheckConsistency calls CheckConsistency API which returns true if confirming the specified tails would result in a consistent ledger state.
func (*API) FindTransactions ¶
func (api *API) FindTransactions(ft *FindTransactionsRequest) (*FindTransactionsResponse, error)
FindTransactions calls FindTransactions API.
func (*API) GetBalances ¶
func (api *API) GetBalances(adr []Address, threshold int64) (*GetBalancesResponse, error)
GetBalances calls GetBalances API.
func (*API) GetInclusionStates ¶
func (api *API) GetInclusionStates(tx []Trytes, tips []Trytes) (*GetInclusionStatesResponse, error)
GetInclusionStates calls GetInclusionStates API.
func (*API) GetLatestInclusion ¶
GetLatestInclusion takes the most recent solid milestone as returned by getNodeInfo and uses it to get the inclusion states of a list of transaction hashes
func (*API) GetNeighbors ¶
func (api *API) GetNeighbors() (*GetNeighborsResponse, error)
GetNeighbors calls GetNeighbors API.
func (*API) GetNodeInfo ¶
func (api *API) GetNodeInfo() (*GetNodeInfoResponse, error)
GetNodeInfo calls GetNodeInfo API.
func (*API) GetTips ¶
func (api *API) GetTips() (*GetTipsResponse, error)
GetTips calls GetTips API.
func (*API) GetTransactionsToApprove ¶
func (api *API) GetTransactionsToApprove(depth, numWalks int64, reference Trytes) (*GetTransactionsToApproveResponse, error)
GetTransactionsToApprove calls GetTransactionsToApprove API.
func (*API) GetTrytes ¶
func (api *API) GetTrytes(hashes []Trytes) (*GetTrytesResponse, error)
GetTrytes calls GetTrytes API.
func (*API) InterruptAttachingToTangle ¶
InterruptAttachingToTangle calls InterruptAttachingToTangle API.
func (*API) RemoveNeighbors ¶
func (api *API) RemoveNeighbors(uris []string) (*RemoveNeighborsResponse, error)
RemoveNeighbors calls RemoveNeighbors API.
func (*API) StoreTransactions ¶
func (api *API) StoreTransactions(trytes []Transaction) error
StoreTransactions calls StoreTransactions API.
type AddNeighborsRequest ¶
type AddNeighborsRequest struct { Command string `json:"command"` // URIS is an array of strings in the form of "udp://identifier:port" // where identifier can be either an IP address or a domain name. URIS []string `json:"uris"` }
AddNeighborsRequest is for AddNeighbors API request.
type AddNeighborsResponse ¶
type AddNeighborsResponse struct { Duration int64 `json:"duration"` AddedNeighbors int64 `json:"addedNeighbors"` }
AddNeighborsResponse is for AddNeighbors API response.
type Address ¶
type Address Trytes
Address represents address without a checksum for iota. Don't type cast, use ToAddress instead to check validity.
func NewAddress ¶
NewAddress generates a new address from seed without checksum
func NewAddresses ¶
NewAddresses generates new count addresses from seed without a checksum
func (Address) Checksum ¶
Checksum returns checksum trytes. This panics if len(address)<81 TODO: does this really need to panic? can it just return an error?
func (Address) WithChecksum ¶
WithChecksum returns Address+checksum. This panics if len(address)<81 TODO: does this really need to panic?
type AddressInfo ¶
AddressInfo includes an address and its infomation for signing.
func (*AddressInfo) Address ¶
func (a *AddressInfo) Address() (Address, error)
Address makes an Address from an AddressInfo
func (*AddressInfo) Key ¶
func (a *AddressInfo) Key() (Trytes, error)
Key makes a Key from an AddressInfo
type AttachToTangleRequest ¶
type AttachToTangleRequest struct { Command string `json:"command"` TrunkTransaction Trytes `json:"trunkTransaction"` BranchTransaction Trytes `json:"branchTransaction"` MinWeightMagnitude int64 `json:"minWeightMagnitude"` Trytes []Transaction `json:"trytes"` }
AttachToTangleRequest is for AttachToTangle API request.
type AttachToTangleResponse ¶
type AttachToTangleResponse struct { Duration int64 `json:"duration"` Trytes []Transaction `json:"trytes"` }
AttachToTangleResponse is for AttachToTangle API response.
type Balances ¶
type Balances []Balance
Balances is a slice of Balance.
type BroadcastTransactionsRequest ¶
type BroadcastTransactionsRequest struct { Command string `json:"command"` Trytes []Transaction `json:"trytes"` }
BroadcastTransactionsRequest is for BroadcastTransactions API request.
type Bundle ¶
type Bundle []Transaction
Bundle is transactions that are bundled (grouped) together when creating a transfer.
func PrepareTransfers ¶
func PrepareTransfers(api *API, seed Trytes, trs []Transfer, inputs []AddressInfo, remainder Address, security int) (Bundle, error)
PrepareTransfers gets an array of transfer objects as input, and then prepares the transfer by generating the correct bundle as well as choosing and signing the inputs if necessary (if it's a value transfer).
func Send ¶
func Send(api *API, seed Trytes, security int, trs []Transfer, mwm int64, pow PowFunc) (Bundle, error)
Send sends tokens. If you need to do pow locally, you must specifiy pow func, otherwise this calls the AttachToTangle API
func (*Bundle) Add ¶
Add adds a bundle to bundle slice. Elements which are not specified are filled with zeroed trits.
func (Bundle) Categorize ¶
Categorize categorizes a list of transfers into sent and received. It is important to note that zero value transfers (which for example, are being used for storing addresses in the Tangle), are seen as received in this function.
type CheckConsistencyResponse ¶
type CheckConsistencyResponse struct { Duration int64 `json:"duration"` State bool `json:"state"` Info string `json:"info"` }
CheckConsistencyResponse is for CheckConsistency API response.
type Curl ¶
type Curl struct {
// contains filtered or unexported fields
}
Curl is a sponge function with an internal state of size StateSize. b = r + c, b = StateSize, r = HashSize, c = StateSize - HashSize
type ErrorResponse ¶
ErrorResponse is for an exception occurring while calling API.
type FindTransactionsRequest ¶
type FindTransactionsRequest struct { Command string `json:"command"` Bundles []Trytes `json:"bundles,omitempty"` Addresses []Address `json:"addresses,omitempty"` Tags []Trytes `json:"tags,omitempty"` Approvees []Trytes `json:"approvees,omitempty"` }
FindTransactionsRequest is for FindTransactions API request.
type FindTransactionsResponse ¶
type FindTransactionsResponse struct { Duration int64 `json:"duration"` Hashes []Trytes `json:"hashes"` }
FindTransactionsResponse is for FindTransaction API response.
type GetBalancesRequest ¶
type GetBalancesRequest struct { Command string `json:"command"` Addresses []Address `json:"addresses"` Threshold int64 `json:"threshold"` }
GetBalancesRequest is for GetBalances API request.
type GetBalancesResponse ¶
type GetBalancesResponse struct { Duration int64 `json:"duration"` Balances []int64 `json:"balances"` Milestone Trytes `json:"milestone"` MilestoneIndex int64 `json:"milestoneIndex"` }
GetBalancesResponse is for GetBalances API response.
type GetInclusionStatesRequest ¶
type GetInclusionStatesRequest struct { Command string `json:"command"` Transactions []Trytes `json:"transactions"` Tips []Trytes `json:"tips"` }
GetInclusionStatesRequest is for GetInclusionStates API request.
type GetInclusionStatesResponse ¶
type GetInclusionStatesResponse struct { Duration int64 `json:"duration"` States []bool `json:"states"` }
GetInclusionStatesResponse is for GetInclusionStates API response.
type GetNeighborsRequest ¶
type GetNeighborsRequest struct {
Command string `json:"command"`
}
GetNeighborsRequest is for GetNeighbors API request.
type GetNeighborsResponse ¶
GetNeighborsResponse is for GetNeighbors API response.
type GetNodeInfoRequest ¶
type GetNodeInfoRequest struct {
Command string `json:"command"`
}
GetNodeInfoRequest is for GetNodeInfo API request.
type GetNodeInfoResponse ¶
type GetNodeInfoResponse struct { AppName string `json:"appName"` AppVersion string `json:"appVersion"` Duration int64 `json:"duration"` JREAvailableProcessors int64 `json:"jreAvailableProcessors"` JREFreeMemory int64 `json:"jreFreeMemory"` JREMaxMemory int64 `json:"jreMaxMemory"` JRETotalMemory int64 `json:"jreTotalMemory"` LatestMilestone Trytes `json:"latestMilestone"` LatestMilestoneIndex int64 `json:"latestMilestoneIndex"` LatestSolidSubtangleMilestone Trytes `json:"latestSolidSubtangleMilestone"` LatestSolidSubtangleMilestoneIndex int64 `json:"latestSolidSubtangleMilestoneIndex"` Neighbors int64 `json:"neighbors"` PacketQueueSize int64 `json:"packetQueueSize"` Time int64 `json:"time"` Tips int64 `json:"tips"` TransactionsToRequest int64 `json:"transactionsToRequest"` }
GetNodeInfoResponse is for GetNode API response.
type GetTipsRequest ¶
type GetTipsRequest struct {
Command string `json:"command"`
}
GetTipsRequest is for GetTipsRequest API request.
type GetTipsResponse ¶
GetTipsResponse is for GetTips API response.
type GetTransactionsToApproveRequest ¶
type GetTransactionsToApproveRequest struct { Command string `json:"command"` Depth int64 `json:"depth"` }
GetTransactionsToApproveRequest is for GetTransactionsToApprove API request.
type GetTransactionsToApproveResponse ¶
type GetTransactionsToApproveResponse struct { Duration int64 `json:"duration"` TrunkTransaction Trytes `json:"trunkTransaction"` BranchTransaction Trytes `json:"branchTransaction"` }
GetTransactionsToApproveResponse is for GetTransactionsToApprove API response.
type GetTrytesRequest ¶
GetTrytesRequest is for GetTrytes API request.
type GetTrytesResponse ¶
type GetTrytesResponse struct { Duration int64 `json:"duration"` Trytes []Transaction `json:"trytes"` }
GetTrytesResponse is for GetTrytes API response.
type InterruptAttachingToTangleRequest ¶
type InterruptAttachingToTangleRequest struct {
Command string `json:"command"`
}
InterruptAttachingToTangleRequest is for InterruptAttachingToTangle API request.
type Kerl ¶
type Kerl struct {
// contains filtered or unexported fields
}
Kerl ... TODO: find out the difference between this anc Curl and document
type Neighbor ¶
type Neighbor struct { Address Address `json:"address"` ConnectionType string `json:"connectionType"` NumberOfAllTransactions int64 `json:"numberOfAllTransactions"` NumberOfInvalidTransactions int64 `json:"numberOfInvalidTransactions"` NumberOfNewTransactions int64 `json:"numberOfNewTransactions"` NumberOfRandomTransactionRequests int64 `json:"numberOfRandomTransactionRequests"` NumberOfSentTransactions int64 `json:"numberOfSentTransactions"` }
Neighbor is a part of response of GetNeighbors API.
type RemoveNeighborsRequest ¶
type RemoveNeighborsRequest struct { Command string `json:"command"` // URIS is an array of strings in the form of "udp://identifier:port" // where identifier can be either an IP address or a domain name. URIS []string `json:"uris"` }
RemoveNeighborsRequest is for RemoveNeighbors API request.
type RemoveNeighborsResponse ¶
type RemoveNeighborsResponse struct { Duration int64 `json:"duration"` RemovedNeighbors int64 `json:"removedNeighbors"` }
RemoveNeighborsResponse is for RemoveNeighbors API response.
type StoreTransactionsRequest ¶
type StoreTransactionsRequest struct { Command string `json:"command"` Trytes []Transaction `json:"trytes"` }
StoreTransactionsRequest is for StoreTransactions API request.
type Transaction ¶
type Transaction struct { SignatureMessageFragment Trytes Address Address Value int64 `json:",string"` ObsoleteTag Trytes Timestamp time.Time `json:",string"` CurrentIndex int64 `json:",string"` LastIndex int64 `json:",string"` Bundle Trytes TrunkTransaction Trytes BranchTransaction Trytes Tag Trytes AttachmentTimestamp Trytes AttachmentTimestampLowerBound Trytes AttachmentTimestampUpperBound Trytes Nonce Trytes }
Transaction contains all info needed for an iota transaction
func NewTransaction ¶
func NewTransaction(trytes Trytes) (*Transaction, error)
NewTransaction makes tx from trits.
func (*Transaction) HasValidNonce ¶
func (t *Transaction) HasValidNonce(mwm int64) bool
HasValidNonce checks if the transaction has the valid MinWeightMagnitude. In order to check the MWM we count trailing 0's of the curlp hash of a transaction.
func (*Transaction) Hash ¶
func (t *Transaction) Hash() Trytes
Hash returns the hash of the transaction.
func (*Transaction) MarshalJSON ¶
func (t *Transaction) MarshalJSON() ([]byte, error)
MarshalJSON makes trytes ([]byte) from a transaction.
func (*Transaction) Trytes ¶
func (t *Transaction) Trytes() Trytes
Trytes converts the transaction to Trytes.
func (*Transaction) UnmarshalJSON ¶
func (t *Transaction) UnmarshalJSON(b []byte) error
UnmarshalJSON makes transaction struct from json.
type Trits ¶
type Trits []int8
Trits is a slice of int8. You should not use cast, use ToTrits instead to ensure the validity.
func BytesToTrits ¶
BytesToTrits converts binary to ternay
func (Trits) Bytes ¶
Bytes is only defined for hashes, i.e. slices of trits of length 243. It returns 48 bytes. nolint: gocyclo, gas
func (Trits) Int ¶
Int converts a slice of trits into an integer and assumes little-endian notation.
func (Trits) IsValidLength ¶
IsValidLength returns the validity of the trit length
func (Trits) TrailingZeros ¶
TrailingZeros returns the number of trailing zeros of the given trits.
type Trytes ¶
type Trytes string
Trytes is a string of trytes. You should not typecast, use ToTrytes instead to be safe
func FromString ¶
func NewKey ¶
NewKey takes a seed encoded as Trytes, an index and a security level to derive a private key returned as Trytes
func Sign ¶
Sign calculates signature from bundle hash and key by hashing x 13-normalizedBundleFragment[i] for each segments in keyTrits.
func (Trytes) Normalize ¶
Normalize normalized bits into trits so that the sum of trits TODO: (and?) bits is zero. nolint: gocyclo