ResultSet contains a list of keys or values
| Field | Type | Label | Description |
| results | bytes | repeated |
|
BatchMsg encapsulates multiple messages to support batch transaction
| Field | Type | Label | Description |
| messages | BatchMsg.Union | repeated |
|
| Field | Type | Label | Description |
| send_msg | cash.SendMsg |
|
|
| create_escrow_msg | escrow.CreateEscrowMsg |
|
|
| release_escrow_msg | escrow.ReleaseEscrowMsg |
|
|
| return_escrow_msg | escrow.ReturnEscrowMsg |
|
|
| update_escrow_msg | escrow.UpdateEscrowPartiesMsg |
|
|
| create_contract_msg | multisig.CreateContractMsg |
|
|
| update_contract_msg | multisig.UpdateContractMsg |
|
|
| set_validators_msg | validators.SetValidatorsMsg |
|
|
| new_token_info_msg | currency.NewTokenInfoMsg |
|
|
| add_approval_msg | nft.AddApprovalMsg | No recursive batches! |
|
| remove_approval_msg | nft.RemoveApprovalMsg |
|
|
| issue_username_nft_msg | username.IssueTokenMsg |
|
|
| add_username_address_nft_msg | username.AddChainAddressMsg |
|
|
| remove_username_address_msg | username.RemoveChainAddressMsg |
|
|
| new_revenue_msg | distribution.NewRevenueMsg |
|
|
| distribute_msg | distribution.DistributeMsg |
|
|
| reset_revenue_msg | distribution.ResetRevenueMsg | upgrade schema is important enough, it should be a solo action aswap and gov don't make much sense as part of a batch (no vote buying) |
| Field | Type | Label | Description |
| messages | ProposalBatchMsg.Union | repeated |
|
| Field | Type | Label | Description |
| send_msg | cash.SendMsg |
|
|
| release_escrow_msg | escrow.ReleaseEscrowMsg |
|
|
| update_escrow_msg | escrow.UpdateEscrowPartiesMsg |
|
|
| set_validators_msg | validators.SetValidatorsMsg |
|
|
| new_revenue_msg | distribution.NewRevenueMsg | no recursive batches |
|
| distribute_msg | distribution.DistributeMsg |
|
|
| reset_revenue_msg | distribution.ResetRevenueMsg |
|
|
| update_electorate_msg | gov.UpdateElectorateMsg | don't allow UpgradeSchema as part of a batch, as effects are too confusing |
|
| update_election_rule_msg | gov.UpdateElectionRuleMsg |
|
|
| text_resolution_msg | gov.TextResolutionMsg |
|
ProposalOptions are possible items that can be enacted by a governance vote
Trimmed down somewhat arbitrary to what is believed to be reasonable
| Field | Type | Label | Description |
| send_msg | cash.SendMsg |
|
|
| release_escrow_msg | escrow.ReleaseEscrowMsg |
|
|
| update_escrow_msg | escrow.UpdateEscrowPartiesMsg |
|
|
| set_validators_msg | validators.SetValidatorsMsg |
|
|
| batch_msg | ProposalBatchMsg |
|
|
| new_revenue_msg | distribution.NewRevenueMsg |
|
|
| distribute_msg | distribution.DistributeMsg |
|
|
| reset_revenue_msg | distribution.ResetRevenueMsg |
|
|
| upgrade_schema_msg | migration.UpgradeSchemaMsg |
|
|
| update_electorate_msg | gov.UpdateElectorateMsg |
|
|
| update_election_rule_msg | gov.UpdateElectionRuleMsg |
|
|
| text_resolution_msg | gov.TextResolutionMsg |
|
Tx contains the message.
When extending Tx, follow the rules:
- range 1-50 is reserved for middlewares,
- range 51-inf is reserved for different message types,
- keep the same numbers for the same message types in both bcpd and bnsd
applications. For example, FeeInfo field is used by both and indexed at
first position. Skip unused fields (leave index unused or comment out for
clarity).
When there is a gap in message sequence numbers - that most likely means some
old fields got deprecated. This is done to maintain binary compatibility.
| Field | Type | Label | Description |
| fees | cash.FeeInfo |
|
|
| signatures | sigs.StdSignature | repeated |
|
| multisig | bytes | repeated | ID of a multisig contract. |
| send_msg | cash.SendMsg |
|
|
| create_escrow_msg | escrow.CreateEscrowMsg |
|
|
| release_escrow_msg | escrow.ReleaseEscrowMsg |
|
|
| return_escrow_msg | escrow.ReturnEscrowMsg |
|
|
| update_escrow_msg | escrow.UpdateEscrowPartiesMsg |
|
|
| create_contract_msg | multisig.CreateContractMsg |
|
|
| update_contract_msg | multisig.UpdateContractMsg |
|
|
| set_validators_msg | validators.SetValidatorsMsg |
|
|
| new_token_info_msg | currency.NewTokenInfoMsg |
|
|
| batch_msg | BatchMsg |
|
|
| add_approval_msg | nft.AddApprovalMsg |
|
|
| remove_approval_msg | nft.RemoveApprovalMsg |
|
|
| issue_username_nft_msg | username.IssueTokenMsg |
|
|
| add_username_address_nft_msg | username.AddChainAddressMsg |
|
|
| remove_username_address_msg | username.RemoveChainAddressMsg |
|
|
| new_revenue_msg | distribution.NewRevenueMsg |
|
|
| distribute_msg | distribution.DistributeMsg |
|
|
| reset_revenue_msg | distribution.ResetRevenueMsg |
|
|
| upgrade_schema_msg | migration.UpgradeSchemaMsg |
|
|
| create_swap_msg | aswap.CreateSwapMsg |
|
|
| release_swap_msg | aswap.ReleaseSwapMsg |
|
|
| return_swap_msg | aswap.ReturnSwapMsg |
|
|
| create_proposal_msg | gov.CreateProposalMsg |
|
|
| delete_proposal_msg | gov.DeleteProposalMsg |
|
|
| vote_msg | gov.VoteMsg |
|
|
| tally_msg | gov.TallyMsg |
|
|
| update_electorate_msg | gov.UpdateElectorateMsg |
|
|
| update_election_rule_msg | gov.UpdateElectionRuleMsg | 79 is reserved (see ProposalOptions: TextResolutionMsg) |
| Field | Type | Label | Description |
| username_id | bytes |
|
|
| blockchain_id | bytes |
|
|
| address | string |
|
ChainAddress is an address bind to a specific blockchain chain.
| Field | Type | Label | Description |
| blockchain_id | bytes | An arbitrary blockchain ID. Original design was assuming a relation to our internal blockchain ID, but to simplify the implementation, we no longer register blckchain. Instead we allow to pass any value here, withouth validating it. |
|
| address | string | Address is a unique identifier of an account on the referenced blockchain. |
| Field | Type | Label | Description |
| id | bytes |
|
|
| owner | bytes |
|
|
| approvals | nft.ActionApprovals | repeated |
|
| details | TokenDetails |
|
| Field | Type | Label | Description |
| username_id | bytes |
|
|
| blockchain_id | bytes |
|
|
| address | string |
|
| Field | Type | Label | Description |
| addresses | ChainAddress | repeated |
|
| Field | Type | Label | Description |
| base | nft.NonFungibleToken |
|
|
| details | TokenDetails |
|
Metadata is expected to be the first argument of every message or model. It
contains all essential attributes.
Each protobuf message should be declared with the first attribute being
weave.Metadata metadata = 1;
| Field | Type | Label | Description |
| schema | uint32 |
|
Coin can hold any amount between -1 billion and +1 billion
at steps of 10^-9. It is a fixed-point decimal
representation and uses integers to avoid rounding
associated with floats.
Every code has a denomination, which is just a
If you want anything more complex, you should write your
own type, possibly borrowing from this code.
| Field | Type | Label | Description |
| whole | int64 | Whole coins, -10^15 < integer < 10^15 |
|
| fractional | int64 | Billionth of coins. 0 <= abs(fractional) < 10^9 If fractional != 0, must have same sign as integer |
|
| ticker | string | Ticker is 3-4 upper-case letters and all Coins of the same currency can be combined |
| Field | Type | Label | Description |
| ed25519 | bytes |
|
| Field | Type | Label | Description |
| ed25519 | bytes |
|
| Field | Type | Label | Description |
| ed25519 | bytes |
|
| Field | Type | Label | Description |
| admin | bytes | Admin holds the address of the administrator allowed to upgrade schema versions. If you wish to permit more than one entity to be an admin, use multisig. |
Schema declares the maxiumum supported schema version for a package.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| pkg | string | Pkg holds the name of the package that this migration is declared for. For example, for extension `x/myext` package value is `myext` |
|
| version | uint32 | Version holds the highest supported schema version. |
UpgradeSchemaMsg is a request to upgrade schema version of a given package
by one version.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| pkg | string | Name of the package that schema version upgrade is made for. |
Counter could be used for sequence, but mainly just for test
| Field | Type | Label | Description |
| count | int64 |
|
MultiRef contains a list of references to pks
| Field | Type | Label | Description |
| refs | bytes | repeated |
|
VersionedID is the combination of document ID and version number.
| Field | Type | Label | Description |
| id | bytes | Unique identifier |
|
| version | uint32 | Document version, starting with 1. |
CreateSwapMsg creates a Swap with some coins.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| src | bytes |
|
|
| preimage_hash | bytes | sha256 hash of preimage, 32 bytes long |
|
| recipient | bytes |
|
|
| amount | coin.Coin | repeated | amount may contain multiple token types |
| timeout | int64 | Timeout represents wall clock time. |
|
| memo | string | max length 128 character |
ReleaseSwapMsg releases the tokens to the recipient.
This operation is authorized by preimage, which is sent raw and then hashed on the backend.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| swap_id | bytes | swap_id to release |
|
| preimage | bytes | raw preimage to unlock swap, also helpful to retrieve the swap by it's hashed version must be exactly 32 bytes long |
ReturnSwapMsg releases the tokens to the src.
This operation only works if the Swap is expired.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| swap_id | bytes | swap_id to return |
Swap is designed to hold some coins for atomic swap, locked by preimage_hash
| Field | Type | Label | Description |
| metadata | weave.Metadata | metadata is used for schema versioning support |
|
| preimage_hash | bytes | sha256 hash of preimage, 32 bytes long |
|
| src | bytes | src is a sender address |
|
| recipient | bytes | recipient is an address of recipient |
|
| timeout | int64 | If unreleased before timeout, swap will return coins to src. Timeout represents wall clock time as read from the block header. Timeout is represented using POSIX time format. Expiration time is inclusive meaning that the swap expires as soon as the current time is equal or greater than timeout value. nonexpired: [created, timeout) expired: [timeout, infinity) |
|
| memo | string | max length 128 characters |
| Field | Type | Label | Description |
| elements | bytes | repeated |
|
| Field | Type | Label | Description |
| owner | bytes | TODO: add schema uint32 here |
|
| collector_address | bytes |
|
|
| minimal_fee | coin.Coin |
|
| Field | Type | Label | Description |
| patch | Configuration | TODO: add schema uint32 here |
FeeInfo records who pays what fees to have this
message processed
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| payer | bytes |
|
|
| fees | coin.Coin |
|
SendMsg is a request to move these coins from the given
source to the given destination address.
memo is an optional human-readable message
ref is optional binary data, that can refer to another
eg. tx hash
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| src | bytes |
|
|
| dest | bytes |
|
|
| amount | coin.Coin |
|
|
| memo | string | max length 128 character |
|
| ref | bytes | max length 64 bytes |
Set may contain Coin of many different currencies.
It handles adding and subtracting sets of currencies.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| coins | coin.Coin | repeated |
|
NewTokenInfoMsg will register a new currency. Ticker (currency symbol) can
be registered only once.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| ticker | string |
|
|
| name | string |
|
TokenInfo contains information about a single currency. It is used as an
alternative solution to hardcoding supported currencies information.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| name | string |
|
DistributeMsg is a request to distribute all funds collected within a single
revenue instance. Revenue is distributed between recipients. Request must be
signed using admin key.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| revenue_id | bytes | Revenue ID reference an ID of a revenue instance that the collected fees should be distributed between recipients. |
NewRevenueMsg is issuing the creation of a new revenue stream instance.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| admin | bytes | Admin key belongs to the governance entities. It can be used to transfer stored amount to an another account. While not enforced it is best to use a multisig contract here. |
|
| recipients | Recipient | repeated | Recipients holds any number of addresses that the collected revenue is distributed to. Must be at least one. |
| Field | Type | Label | Description |
| address | bytes | An address that the funds should be transferred to. This should not be the validator addresses, as the keys used to sign blocks should never be in a wallet. This can be the wallets of the admins of the validators. |
|
| weight | int32 | Weight defines what part of the total revenue goes to this recipient. Each recipient receives part of the total revenue amount proportional to the weight. For example, if there are two recipients with weights 1 and 2 accordingly, distribution will be 1/3 to the first address and 2/3 to the second one. |
ResetRevenueMsg change the configuration of a revenue instance.
To assure recipients that they will receive money, every revenue update is
forcing funds distribution. Before applying any change all funds stored by
the revenue account are distributed using old configuration. Only when the
collected revenue amount is equal to zero the change is applied.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| revenue_id | bytes | Revenue ID reference an ID of a revenue instance that is updated. |
|
| recipients | Recipient | repeated | Recipients holds any number of addresses that the collected revenue is distributed to. Must be at least one. |
Revenue represents an account with funds collected from the fees. This is a
temporary account used for storing fees that are later distributed between
the owners.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| admin | bytes | Admin key belongs to the governance entities. It can be used to transfer stored amount to an another account. While not enforced it is best to use a multisig contract here. |
|
| recipients | Recipient | repeated | Recipients holds any number of addresses that the collected revenue is distributed to. Must be at least one. |
CreateEscrowMsg is a request to create an Escrow with some tokens.
If sender is not defined, it defaults to the first signer
The rest must be defined
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| src | bytes |
|
|
| arbiter | bytes |
|
|
| recipient | bytes |
|
|
| amount | coin.Coin | repeated | amount may contain multiple token types |
| timeout | int64 | Timeout represents wall clock time. |
|
| memo | string | max length 128 character |
Escrow holds some coins.
The arbiter or sender can release them to the recipient.
The recipient can return them to the sender.
Upon timeout, they will be returned to the sender.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| sender | bytes |
|
|
| arbiter | bytes |
|
|
| recipient | bytes |
|
|
| timeout | int64 | If unreleased before timeout, escrow will return to sender. Timeout represents wall clock time as read from the block header. Timeout is represented using POSIX time format. Expiration time is inclusive meaning that the escrow expires as soon as the current time is equal or greater than timeout value. nonexpired: [created, timeout) expired: [timeout, infinity) |
|
| memo | string | max length 128 character |
ReleaseEscrowMsg releases the content to the recipient.
Must be authorized by sender or arbiter.
If amount not provided, defaults to entire escrow,
May be a subset of the current balance.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| escrow_id | bytes |
|
|
| amount | coin.Coin | repeated |
|
ReturnEscrowMsg returns the content to the sender.
Must be authorized by the sender or an expired timeout
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| escrow_id | bytes |
|
UpdateEscrowPartiesMsg changes any of the parties of the escrow:
sender, arbiter, recipient. This must be authorized by the current
holder of that position (eg. only sender can update sender).
Represents delegating responsibility
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| escrow_id | bytes |
|
|
| sender | bytes |
|
|
| arbiter | bytes |
|
|
| recipient | bytes |
|
CreateProposalMsg creates a new governance proposal.
Metadata is from CreateProposalMsgBase, actual proposal details from app-specific raw_option
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| base | CreateProposalMsgBase |
|
|
| raw_option | bytes |
|
CreateProposalMsgBase is the common info in all proposals.
This is separated out to easily be included in an app-specific CreateProposalMsg
| Field | Type | Label | Description |
| title | string | Human readable title. Must match `^[a-zA-Z0-9 _.-]{4,128}$` |
|
| description | string | Human readable description with 3 to 5000 chars. |
|
| election_rule_id | bytes | ElectionRuleID is a reference to the election rule |
|
| start_time | int64 | Unix timestamp when the proposal starts. Must be in the future. |
|
| author | bytes | Author is an optional field to set the address of the author with a proposal. The author must sign the message. When not set it will default to the main signer. |
DeleteProposalMsg deletes a governance proposal.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| proposal_id | bytes | ProposalID is the unique identifier of the proposal to delete |
Election Rule defines how an election is run. A proposal must be voted upon via a pre-defined ruleset.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| version | uint32 | Document version |
|
| admin | bytes | Admin is the address that is allowed ot modify an existing election rule. |
|
| electorate_id | bytes | ElectorateID references the electorate using this rule (without version, as changing electorate changes the rule) |
|
| title | string | Human readable title. |
|
| voting_period | uint32 | Duration in seconds of how long the voting period will take place. |
|
| threshold | Fraction | Threshold is the fraction of either all eligible voters or in case of a quorum setup the fraction of all non abstained votes. To accept a proposal this value must be exceeded with Yes votes. The formula applied is: (yes * denominator) > (base * numerator) with base total electorate weight or Yes/No votes in case of quorum set The valid range for the threshold value is `0.5` to `1` (inclusive) which allows any value between half and all of the eligible voters. |
|
| quorum | Fraction | The quorum fraction of eligible voters is based on the total electorate weight and defines a threshold of votes that must be exceeded before the acceptance threshold is applied. This value requires any kind of votes and not only YES. The valid range for the threshold value is `0.5` to `1` (inclusive) which allows any value between half and all of the eligible voters. |
Elector clubs together a address with a weight. The greater the weight
the greater the power of a participant.
| Field | Type | Label | Description |
| address | bytes | The address of the voter. |
|
| weight | uint32 | Weight defines the power of the participants vote. max value is 65535 (2^16-1). |
Electorate defines who may vote in an election. This same group can be used in many elections
and is stored for re-use
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| version | uint32 | Document version |
|
| admin | bytes | Admin is the address that is allowed ot modify an existing electorate. |
|
| title | string | Human readable title. |
|
| electors | Elector | repeated | Elector defines a list of all signatures that are allowed to participate in a vote |
| total_electorate_weight | uint64 | TotalElectorateWeight is the sum of all electors weights. |
The Fraction type represents a numerator and denominator to enable higher precision thresholds in
the election rules. For example:
numerator: 1, denominator: 2 => > 50%
numerator: 2, denominator: 3 => > 66.666..%
numerator: 6273, denominator: 10000 => > 62.73%
Valid range of the fraction is 0.5 to 1.
| Field | Type | Label | Description |
| numerator | uint32 | The top number in a fraction. |
|
| denominator | uint32 | The bottom number |
A generic proposal for an on-chain governance process.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| common | ProposalCommon |
|
|
| raw_option | bytes | raw_option is app-specific and can be parsed by an OptionDecoder |
ProposalCommon contains all the generic fields for the lifetime of the proposal,
separate from the actual details of what is being voted on
| Field | Type | Label | Description |
| title | string | Human readable title. |
|
| description | string | Description of the proposal in text form. |
|
| election_rule_ref | orm.VersionedIDRef | ElectionRuleRef is a reference to the election rule |
|
| electorate_ref | orm.VersionedIDRef | Reference to the electorate to define the group of possible voters. |
|
| voting_start_time | int64 | Unix timestamp of the block where the voting period starts. Header time of the votes must be greater than or equal to this start time. |
|
| voting_end_time | int64 | Unix timestamp of the block where the voting period ends. Header times of the votes must be before this end time to be included in the election. |
|
| submission_time | int64 | Unix timestamp of the block where the proposal was added to the chain. |
|
| author | bytes | Address of the author who created the proposal. If not set explicit on creation it will default to the main signer. |
|
| vote_state | TallyResult | Result of the election. Contains intermediate tally results while voting period is open. |
|
| status | ProposalCommon.Status | Status represents the high level position in the life cycle of the proposal. Initial value is submitted. |
|
| result | ProposalCommon.Result | Result is the final result based on the votes and election rule. Initial value is Undefined. |
TallyMsg can be sent after the voting period has ended to do the final tally and trigger any state changes.
A final tally can be execute only once. A second submission will fail with an invalid state error.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| proposal_id | bytes | ProposalID is UUID of the proposal to close. |
TallyResult contains sums of the votes and all data for the final result.
| Field | Type | Label | Description |
| total_yes | uint64 | TotalYes is the sum of weights of all the voters that approved the proposal |
|
| total_no | uint64 | TotalNo is the sum of weights of all the voters that rejected the proposal |
|
| total_abstain | uint64 | TotalAbstain is the sum of weights of all the voters that voted abstain |
|
| total_electorate_weight | uint64 | TotalElectorateWeight is the sum of all weights in the electorate. |
|
| quorum | Fraction | Quorum when set is the fraction of the total electorate weight that must be exceeded by total votes weight. |
|
| threshold | Fraction | Threshold is the fraction of Yes votes of a base value that needs to be exceeded to accept the proposal. The base value is either the total electorate weight or the sum of Yes/No weights when a quorum is defined. |
TextResolutionMsg is only intended to be dispatched internally from election
results. It adds a resolution to the list of "approved" resolutions,
with a reference to the electorate that approved it
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| resolution | string |
|
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| election_rule_id | bytes | ElectionRuleID is a reference to the election rule |
|
| voting_period | uint32 | Duration in seconds of how long the voting period will take place. |
|
| threshold | Fraction | Threshold is the fraction of all eligible voters, not only the ones who voted. To accept a proposal this value must be exceeded. The formula is `(yes*denominator) > (numerator*total_electors_weight)`. The valid range for the threshold value is `0.5` to `1` (inclusive) which allows any value between half and all of the eligible voters. |
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| electorate_id | bytes | ElectorateID is the reference to the electorate that defines the group of possible voters. |
|
| diff_electors | Elector | repeated | DiffElectors contains the changes that should be applied. Adding an address should have a positive weight, removing with weight=0. |
Vote combines the elector and their voted option to archive them.
The proposalID and address is stored within the key.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| elector | Elector | Elector is who voted |
|
| voted | VoteOption | VoteOption is what they voted |
VoteMsg is the way to express a voice and participate in an election of a proposal on chain.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| proposal_id | bytes | The unique id of the proposal. |
|
| voter | bytes | voter address is an optional field. When not set the main signer will be used as default. The voter address must be included in the electorate for a valid vote. |
|
| selected | VoteOption | Option for the vote. Must be Yes, No or Abstain for a valid vote. |
| Name | Number | Description |
| PROPOSAL_COMMON_RESULT_INVALID | 0 | An empty value is invalid and not allowed |
| PROPOSAL_COMMON_RESULT_UNDEFINED | 1 | Until a final tally has happened the status is undefined |
| PROPOSAL_COMMON_RESULT_ACCEPTED | 2 | Final result of the tally |
| PROPOSAL_COMMON_RESULT_REJECTED | 3 | Final result of the tally |
| Name | Number | Description |
| PROPOSAL_COMMON_STATUS_INVALID | 0 | An empty value is invalid and not allowed |
| PROPOSAL_COMMON_STATUS_SUBMITTED | 1 | Initial status of a proposal when persisted. |
| PROPOSAL_COMMON_STATUS_CLOSED | 2 | Final status of a proposal when the tally was executed |
| PROPOSAL_COMMON_STATUS_WITHDRAWN | 3 | A proposal can be deleted before the voting start time by the owner. When this happens the final status is Withdrawn. |
VoteOptions define possible values for a vote including the INVALID default.
| Name | Number | Description |
| VOTE_OPTION_INVALID | 0 | |
| VOTE_OPTION_YES | 1 | |
| VOTE_OPTION_NO | 2 | |
| VOTE_OPTION_ABSTAIN | 3 |
ProposalOptions is a sum type of all possible messages that
may be dispatched via a governance proposal.
For the test case, we only refer to package-internal messages
and handlers, but an application can reference messages from any package.
| Field | Type | Label | Description |
| text | TextResolutionMsg |
|
|
| electorate | UpdateElectorateMsg |
|
|
| rule | UpdateElectionRuleMsg |
|
MsgFee represents a fee for a single message that must be paid in order for
the message to be processed.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| msg_path | string |
|
|
| fee | coin.Coin |
|
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| participants | Participant | repeated | Participants defines a list of all signatures that are allowed to sign the contract. |
| activation_threshold | uint32 | Activation threshold defines the minimal weight value that must be provided from participants in order to activate the contract. Weight is computed as the sum of weights of all participating signatures. |
|
| admin_threshold | uint32 | Admin threshold defines the minimal weight value that must be provided from participants in order to administrate the contract. Weight is computed as the sum of weights of all participating signatures. |
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| participants | Participant | repeated |
|
| activation_threshold | uint32 |
|
|
| admin_threshold | uint32 |
|
Participant clubs together a signature with a weight. The greater the weight
the greater the power of a signature.
| Field | Type | Label | Description |
| signature | bytes |
|
|
| weight | uint32 |
|
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| contract_id | bytes |
|
|
| participants | Participant | repeated |
|
| activation_threshold | uint32 |
|
|
| admin_threshold | uint32 |
|
NewTokenMsg will register a new token.
This must not conflict with any existing ticker,
and should be limited to privledged users.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| ticker | string |
|
|
| name | string |
|
|
| sig_figs | int32 |
|
SetWalletNameMsg will set the name on an existing
wallet. Can only be performed if the wallet name is empty.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| address | bytes |
|
|
| name | string |
|
Token contains information about a registered currency
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| name | string |
|
|
| sig_figs | int32 |
|
Wallet has a name and a set of coins
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| coins | coin.Coin | repeated |
|
| name | string |
|
ActionApprovals are used to control permissions and validate that a user can
execute given operation.
| Field | Type | Label | Description |
| action | string |
|
|
| approvals | Approval | repeated |
|
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| id | bytes |
|
|
| address | bytes |
|
|
| action | string |
|
|
| options | ApprovalOptions |
|
|
| t | string |
|
| Field | Type | Label | Description |
| address | bytes |
|
|
| options | ApprovalOptions |
|
| Field | Type | Label | Description |
| until_block_height | int64 | Until block height is used to mark blochain height until which an approval is valid. This can be used to define an approval expiration. |
|
| count | int64 | Count is defining how many times an approval can be used. Each approval test decrese the counter. Once the counter reaches value 0, an approval is considered expired and can no longer be used. Use -1 to bypass count expiration. |
|
| immutable | bool | Immutable is a flag that prevents an option to be modified. Once created, cannot be altered. For example, counter state cannot be changed. |
NonFungibleToken is a message that must be incuded by any concrete NFT
implementation. Usually it is the first attirbute called `base`.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| id | bytes | ID is the address of this token. |
|
| owner | bytes | Owner is the address of the token owner. |
|
| action_approvals | ActionApprovals | repeated | Action approvals is a list of permissions. In order for operation to succeed, all action approvals validation must pass. |
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| id | bytes |
|
|
| address | bytes |
|
|
| action | string |
|
|
| t | string |
|
ClosePaymentChannelMsg close a payment channel and release remaining founds
by sending them back to the sender account.
Recipient account can close channel at any moment.
Sender can close channel only if the timeout was reached.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| channel_id | bytes |
|
|
| memo | string | Max length 128 character. |
CreatePaymentChannelMsg creates a new payment channel that can be used to
transfer value between two parties.
Total amount will be taken from the senders account and allocated for user
in the transactions done via created payment channel.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| src | bytes | Sender address (weave.Address). |
|
| sender_pubkey | crypto.PublicKey | Sender public key is for validating transfer message signature. |
|
| recipient | bytes | Recipient address (weave.Address). |
|
| total | coin.Coin | Maximum amount that can be transferred via this channel. |
|
| timeout | int64 | If reached, channel can be closed by anyone. |
|
| memo | string | Max length 128 character. |
Payment is created by the sender. Sender should give the message to the
recipient, so that it can be redeemed at any time.
Each Payment should be created with amount greater than the previous one.
| Field | Type | Label | Description |
| chain_id | string |
|
|
| channel_id | bytes |
|
|
| amount | coin.Coin |
|
|
| memo | string | Max length 128 character. |
PaymentChannel holds the state of a payment channel during its lifetime.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| src | bytes | Sender is the source that the founds are allocated from. |
|
| sender_pubkey | crypto.PublicKey | Sender public key is a key that must be used to verify signature of transfer message. Sender creates signed transfer messages and gives them to the recipient. Signature prevents from altering transfer message. |
|
| recipient | bytes | Recipient is the party that receives payments through this channel |
|
| total | coin.Coin | Total represents a maximum value that can be transferred via this payment channel. |
|
| timeout | int64 | Timeout represents wall clock time as read from the block header. Timeout is represented using POSIX time format. Expiration time is inclusive meaning that the paychan expires as soon as the current time is equal or greater than timeout value. nonexpired: [created, timeout) expired: [timeout, infinity) |
|
| memo | string | Max length 128 character. |
|
| transferred | coin.Coin | Transferred represents total amount that was transferred using allocated (total) value. Transferred must never exceed total value. |
TransferPaymentChannelMsg binds Payment with a signature created using
senders private key.
Signature is there to ensure that payment message was not altered.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| payment | Payment |
|
|
| signature | crypto.Signature |
|
BumpSequenceMsg increments a sequence counter by given amount for a user
that signed the transaction.
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| increment | uint32 | Increment represents the value by which a sequence value will be increased. Minumum value is one and maxium value must not be greater than 1000. Each transaction increments the sequence by one. This value represents the total increment value, including the default increment. |
StdSignature represents the signature, the identity of the signer
(the Pubkey), and a sequence number to prevent replay attacks.
A given signer must submit transactions with the sequence number
increasing by 1 each time (starting at 0)
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| sequence | int64 |
|
|
| pubkey | crypto.PublicKey |
|
|
| signature | crypto.Signature | Removed Address, Pubkey is more powerful |
UserData just stores the data and is used for serialization.
Key is the Address (PubKey.Permission().Address())
Note: This should not be created from outside the module,
User is the entry point you want
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| pubkey | crypto.PublicKey |
|
|
| sequence | int64 |
|
Accounts is a list of accounts allowed to update validators
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| addresses | bytes | repeated |
|
| Field | Type | Label | Description |
| type | string |
|
|
| data | bytes |
|
This message is designed to update validator power
| Field | Type | Label | Description |
| metadata | weave.Metadata |
|
|
| validator_updates | ValidatorUpdate | repeated |
|
ValidatorUpdate
| Field | Type | Label | Description |
| pubkey | Pubkey |
|
|
| power | int64 |
|
| .proto Type | Notes | C++ Type | Java Type | Python Type |
| double | double | double | float | |
| float | float | float | float | |
| int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int |
| int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long |
| uint32 | Uses variable-length encoding. | uint32 | int | int/long |
| uint64 | Uses variable-length encoding. | uint64 | long | int/long |
| sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int |
| sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long |
| fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int |
| fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long |
| sfixed32 | Always four bytes. | int32 | int | int |
| sfixed64 | Always eight bytes. | int64 | long | int/long |
| bool | bool | boolean | boolean | |
| string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode |
| bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str |


Same-sex marriage: How Australia's change compares to gay rights around the world
Interactive Digital Storytelling teamMillions of Australians are celebrating Parliament's passage of same-sex marriage laws after decades of political debate, activism and a drawn-out postal survey.
But as Australia joins the dozens of nations that have already extended the right to marry to the LGBT community, there are still many places around the world where simply being gay carries with it the risk of jail or even death.
Most countries with similar cultural backgrounds to Australia have already legalised same-sex marriage — including the United States, Canada, England, Ireland, Scotland and Wales.
But same-sex marriage is not legal anywhere in Asia or the Middle East, and South Africa is the only country in Africa to have legalised it.
Even in Europe, the legal status of same-sex marriage is mixed.
The Netherlands became the first country in the world to legalise same-sex marriage in 2001.
Since then, countries such as Portugal, the United Kingdom, France, Spain and Germany have followed suit.
Austria's constitutional court recently overturned the country's laws which prevented same-sex couples marrying, paving the way for legalisation at the beginning of 2019.
But today in 2017, more than half of European Union members have not legalised it, including Italy, Greece and Poland.
Out of the countries that have legalised same-sex marriage, 21 have made the change via a parliamentary vote.
Court rulings prompted the change in five countries.
In Ireland a referendum was legally required to change the law, and it was overwhelmingly passed.
But Australia is the only country to have held a non-binding postal survey before making a parliamentary change.
Elsewhere in the world, LGBT people can struggle to simply stay out of jail.
There are more than 70 countries where homosexual acts are illegal.
The countries shaded in the map are those where there is a law that prohibits homosexual acts in part or all of the country.
Most of these countries fall within two main categories — just over half are former colonies mostly in Africa that inherited discriminatory laws but never repealed them, while the others are majority-Muslim countries.
What exactly is outlawed varies from country to country.
For example, 28 states only prohibit relations between men.
A common legal formulation is a prohibition of "carnal intercourse against the order of nature".
Not all the countries with these laws actually enforce them for consensual sex at home.
Even more severe, the death penalty is in place for same-sex sexual acts in at least 11 countries, according to the Lesbian, Gay, Bisexual, Trans and Intersex Association's annual report of "state-sponsored homophobia".
It finds the death penalty applies in Sudan, Iran, Saudi Arabia and Yemen and in parts of Nigeria and Somalia, though information on when the death penalty has been carried out is not readily available.
In theory, the death penalty could also be imposed in Mauritania, Afghanistan, Pakistan, Qatar and the United Arab Emirates through sharia law, but this does not appear to have occurred in practice.
So in Australia, like in many countries before it, the LGBT community will soon celebrate its first weddings.


Developer Interface¶
This part of the documentation covers all the interfaces of Apper.
Core Apper Modules¶
The core Apper functionality can be accessed by sub-classing these 3 classes.
Step one is to create an instance of the FusionApp
object.
Step two is to add instances of
apper.Fusion360CommandBase
and
apper.PaletteCommandBase
classes.
Each instance of these classes will be a new command in your add-in.
-
class
apper.
FusionApp
(name, company, debug)¶ Base class for creating a Fusion 360 Add-in
- Parameters
name (
str
) – The name of the addincompany (
str
) – the name of your company or organizationdebug (
bool
) – set this flag as True to enable more interactive feedback when developing.
-
add_command
(name, command_class, options)¶ Adds a command to the application
- Parameters
name (
str
) – The name of the commandcommand_class (
Any
) – This should be your subclass of apper.Fusion360CommandBase or apper.PaletteCommandBaseoptions (
dict
) – Set of options for the command see the full set of options
-
add_command_event
(event_id, event_type, event_class)¶ Register a workspace event that can respond to various workspace actions
- Parameters
event_id (
str
) – A unique identifier for the eventevent_type (
Any
) – One of [UserInterface.commandCreated, UserInterface.commandStarting, UserInterface.commandTerminated]event_class (
Any
) – Your subclass of apper.Fusion360CommandEvent class
-
add_custom_event
(event_id, event_class)¶ Register a custom event to respond to a function running in a new thread
- Parameters
event_id (
str
) – A unique identifier for the eventevent_class (
Any
) – Your subclass of apper.Fusion360CustomThread
-
add_custom_event_no_thread
(event_id, event_class)¶ Register a custom event
- Parameters
event_id (
str
) – A unique identifier for the eventevent_class (
Any
) – Your subclass of apper.Fusion360CustomThread
-
add_document_event
(event_id, event_type, event_class)¶ Register a document event that can respond to various document actions
- Parameters
event_id (
str
) – A unique identifier for the eventevent_type (
DocumentEvent
) – Any document event in the current applicationevent_class (
Any
) – Your subclass of apper.Fusion360DocumentEvent
-
add_web_request_event
(event_id, event_type, event_class)¶ Register a workspace event that can respond to various workspace actions
- Parameters
event_id (
str
) – A unique identifier for the eventevent_class (
Any
) – Your subclass of apper.Fusion360WebRequestEventevent_type (
WebRequestEvent
) – Opened or Inserting from URL event type such as (app.openedFromURL)
-
add_workspace_event
(event_id, workspace_name, event_class)¶ Register a workspace event that can respond to various workspace actions
- Parameters
event_id (
str
) – A unique identifier for the eventworkspace_name (
str
) – name of the workspace (i.e.event_class (
Any
) – Your subclass of apper.Fusion360WorkspaceEvent
-
check_for_updates
()¶ Not Implemented
-
command_id_from_name
(name)¶ Returns the full cmd_id defined by apper
- Parameters
name (
str
) – this is the value set in options for cmd_id- Return type
Optional
[str
]- Returns
The full cmd_id (i.e. CompanyName_AppName_cmd_id)
-
get_all_preferences
()¶ Gets all preferences stored for this application
- Return type
dict
- Returns
All preferences as a dictionary
-
get_group_preferences
(group_name)¶ Gets preferences for a particular group (typically a given command)
- Parameters
group_name (
str
) – name of parent group in which to store preferences- Return type
dict
- Returns
A dictionary of just the options associated to this particular group
-
run_app
()¶ Runs the Addin
-
save_preferences
(group_name, new_group_preferences, merge)¶ Saves preferences for the application
- Parameters
group_name (
str
) – name of parent group in which to store preferencesnew_group_preferences (
dict
) – Dictionary of preferences to savemerge (
bool
) – If True then the new preferences in the group will be merged, if False all old values are deleted
-
stop_app
()¶ Stops the Addin and cleans up all of the created UI elements
-
class
apper.
Fusion360CommandBase
(name, options)¶ The Fusion360CommandBase class wraps the common tasks used when creating a Fusion 360 Command.
To create a new command create a new subclass of Fusion360CommandBase Then override the methods and add functionality as required
- Parameters
name (
str
) – The name of the commandoptions (
dict
) – A dictionary of options for the command placement in the ui. (TODO - Add docs for this)
-
get_inputs
()¶ Returns a dictionary for all inputs. Very useful for creating quick Fusion 360 Add-ins
-
on_create
(command, inputs)¶ Build your UI components here
When the user clicks the command icon in the Fusion ui (command control) this function will be executed By referencing the inputs object you can easily add dialog box elements to your command Sometimes you may want to read some data or analyze the model BEFORE creating the dialog box
- Parameters
command (
Command
) – reference to the command objectinputs (
CommandInputs
) – quick reference directly to the commandInputs object
-
on_destroy
(command, inputs, reason, input_values)¶ Executed when the command is done. Sometimes useful to check if a user hit cancel
You can use this to do any clean up that may otherwise be difficult until after the command has completed Like firing a second command for example
- Parameters
command (
Command
) – reference to the command objectinputs (
CommandInputs
) – quick reference directly to the commandInputs objectreason (
CommandTerminationReason
) – The reason the command was terminated. Enumerator defined in adsk.core.CommandTerminationReasoninput_values (
dict
) – Opinionated dictionary of the useful values a user entered. The key is the command_id.
-
on_execute
(command, inputs, args, input_values)¶ Will be executed when user selects OK in command dialog.
- Parameters
command (
Command
) – reference to the command objectinputs (
CommandInputs
) – quick reference directly to the commandInputs objectargs (
CommandEventArgs
) – All of the args associated with the CommandEventinput_values (
dict
) – Opinionated dictionary of the useful values a user entered. The key is the command_id.
-
on_input_changed
(command, inputs, changed_input, input_values)¶ Executed when any inputs have changed. Useful for updating command UI.
When a user changes anything in the command dialog this method is executed. Typically used for making changes to the command dialog itself.
- Parameters
command (
Command
) – reference to the command objectinputs (
CommandInputs
) – quick reference directly to the commandInputs objectchanged_input (
CommandInput
) – The specific commandInput that was modified.input_values (
dict
) – Opinionated dictionary of the useful values a user entered. The key is the command_id.
-
on_preview
(command, inputs, args, input_values)¶ Executed when any inputs have changed, will updated the geometry in the graphics window
Code in this function will cause the graphics to refresh. Note if your addin is complex it may be useful to only preview a subset of the full operations
- Parameters
input_values – Opinionated dictionary of the useful values a user entered. The key is the command_id.
args –
command (
Command
) – reference to the command objectinputs (
CommandInputs
) – quick reference directly to the commandInputs object
-
on_run
()¶ Function is run when the addin starts.
Important! If overridden ensure to execute with super().on_run()
-
on_stop
()¶ Function is run when the addin stops.
Important! If overridden ensure to execute with super().on_stop()
-
class
apper.
PaletteCommandBase
(name, options)¶ Class for creating a Fusion 360 Command that will show a web palette
- Parameters
name (
str
) – Name of the Commandoptions (
dict
) – Dictionary of options
-
on_html_event
(html_args)¶ - Parameters
html_args (
HTMLEventArgs
) – the arguments sent with the command from the html page
-
on_palette_close
()¶ Run when the palette is closed
-
on_palette_execute
(palette)¶ Function is run when the palette is executed. Useful to gather initial data and send to html page
- Parameters
palette (
Palette
) – Reference to the palette
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
Other Modules¶
Fusion360AppEvents.py¶
Python module for creating Fusion 360 event handlers¶
- copyright
2019 by Patrick Rainsberry.
- license
Apache 2.0, see LICENSE for more details.
-
class
apper.Fusion360AppEvents.
Fusion360ActiveSelectionEvent
(event_id, event_type)¶ Create a new Active Selection Event action
- Parameters
event_id – A unique id for this event
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
selection_event_received
(event_args, current_selection)¶ This function will be executed in response to the command event
- Parameters
current_selection – An array of type adsk.core.Selection
event_args – adsk.core.ApplicationCommandEventArgs
-
class
apper.Fusion360AppEvents.
Fusion360CommandEvent
(event_id, event_type)¶ Create a new Command Event action
- Parameters
event_id – A unique id for this event
event_type – One of: [UserInterface.commandCreated, UserInterface.commandStarting, UserInterface.commandTerminated]
-
command_event_received
(event_args, command_id, command_definition)¶ This function will be executed in response to the command event
- Parameters
command_definition – the command definition of the command that was just executed
command_id – the id of the command that was just executed
event_args – adsk.core.ApplicationCommandEventArgs
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
class
apper.Fusion360AppEvents.
Fusion360CustomEvent
(event_id)¶ Creates a new Custom Event handler
- Parameters
event_id – Unique id, can be used by other functions to trigger the event
-
custom_event_received
(event_dict)¶ Function that will run when event is triggered
- Parameters
event_dict (
dict
) – Argument passed to event. Decoded JSON as a dict
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
class
apper.Fusion360AppEvents.
Fusion360CustomThread
(event_id)¶ Creates a new Custom Event handler and a new thread
- Parameters
event_id – Unique id, can be used by other functions to trigger the event
-
custom_event_received
(event_dict)¶ Function that will run when event is triggered
- Parameters
event_dict – Argument passed to event. Decoded JSON as a dict
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
run_in_thread
(thread, event_id, input_data=None)¶ Function to run in new thread
- Parameters
thread – Reference to thread that function is running in
event_id – reference to an event id, not necessarily relevant in this case
input_data – Optional parameter to pass extra data to the thread
-
class
apper.Fusion360AppEvents.
Fusion360DocumentEvent
(event_id, event_type)¶ Creates a new Document Event handler :type event_id:
str
:param event_id: Unique id, can be used by other functions to trigger the event :param event_type: Any document event in the current application-
document_event_received
(event_args, document)¶ - Parameters
event_args –
document –
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
-
class
apper.Fusion360AppEvents.
Fusion360NewThread
(event_id, input_data=None)¶ Starts a new thread and runs the given function in it
- Parameters
event_id – Unique id, can be used by other functions to trigger the event
input_data – Optional parameter to pass extra data to the thread
-
run_in_thread
(thread, event_id, input_data=None)¶ Function to run in new thread
- Parameters
thread – Reference to thread that function is running in
event_id – reference to an event id, not necessarily relevant in this case
input_data – Optional parameter to pass extra data to the thread
-
class
apper.Fusion360AppEvents.
Fusion360WebRequestEvent
(event_id, event_type)¶ Create a new Web Request Event action
- Parameters
event_id (
str
) – A unique id for this eventevent_type – One of: [Application.insertedFromURL, Application.insertingFromURL, Application.openedFromURL, Application.openingFromURL]
-
on_stop
()¶ Function is run when the addin stops.
Clean up. If overridden ensure to execute with super().on_stop()
-
web_request_event_received
(event_args, file, fusion_id, occurrence_or_document, private_info, properties)¶ This function will be executed in response to the command event
- Parameters
properties – design properties passed with the file (Partnumber Number, Description, Name)
private_info – Extra info passed as json object
fusion_id – A unique identifier to help determine whether the component is new or an instance
occurrence_or_document – If opened, then it is a new document. If it was inserted, it is the created occurence
file – Path to the file that was just received
event_args – adsk.core.WebRequestEventArgs
Fusion360Utilities.py¶
Tools to leverage when creating a Fusion 360 Add-in¶
- copyright
2019 by Patrick Rainsberry.
- license
Apache 2.0, see LICENSE for more details.
-
class
apper.Fusion360Utilities.
AppObjects
¶ The AppObjects class wraps many common application objects required when writing a Fusion 360 Addin.
-
property
cam
¶ adsk.cam.CAM from the active document
Note if the document has never been activated in the CAM environment this will return None
Returns: adsk.cam.CAM from the active document
- Return type
Optional
[CAM
]
-
property
design
¶ adsk.fusion.Design from the active document
Returns: adsk.fusion.Design from the active document
- Return type
Optional
[Design
]
-
property
document
¶ adsk.fusion.Design from the active document
Returns: adsk.fusion.Design from the active document
- Return type
Optional
[Document
]
-
property
export_manager
¶ adsk.fusion.ExportManager from the active document
Returns: adsk.fusion.ExportManager from the active document
- Return type
Optional
[ExportManager
]
-
property
f_units_manager
¶ adsk.fusion.FusionUnitsManager from the active document.
Only work in design environment.
Returns: adsk.fusion.FusionUnitsManager or None if in a different workspace than design.
- Return type
Optional
[FusionUnitsManager
]
-
property
product
¶ adsk.fusion.Design from the active document
Returns: adsk.fusion.Design from the active document
- Return type
Optional
[Product
]
-
property
root_comp
¶ Every adsk.fusion.Design has exactly one Root Component
It should also be noted that the Root Component in the Design does not have an associated Occurrence
Returns: The Root Component of the adsk.fusion.Design
- Return type
Optional
[Component
]
-
property
time_line
¶ adsk.fusion.Timeline from the active adsk.fusion.Design
Returns: adsk.fusion.Timeline from the active adsk.fusion.Design
- Return type
Optional
[Timeline
]
-
property
units_manager
¶ adsk.core.UnitsManager from the active document
If not in an active document with design workspace active, will return adsk.core.UnitsManager if possible
Returns: adsk.fusion.FusionUnitsManager or adsk.core.UnitsManager if in a different workspace than design.
- Return type
Optional
[UnitsManager
]
-
property
-
apper.Fusion360Utilities.
combine_feature
(target_body, tool_bodies, operation)¶ Creates Combine Feature in target with all tool bodies as source
- Parameters
target_body (
BRepBody
) – Target body for the combine featuretool_bodies (
List
[BRepBody
]) – A list of tool bodies for the combineoperation (
FeatureOperations
) – An Enumerator defining the feature operation type
-
apper.Fusion360Utilities.
create_component
(target_component, name)¶ Creates a new empty component in the target component
- Parameters
target_component (
Component
) – The target component for the new componentname (
str
) – The name of the new component
- Return type
Occurrence
- Returns
The reference to the occurrence of the newly created component.
-
apper.Fusion360Utilities.
end_group
(start_index)¶ Ends a adsk.fusion.TimelineGroup
start_index: adsk.fusion.TimelineGroup index that is returned from start_group
-
apper.Fusion360Utilities.
extrude_all_profiles
(sketch, distance, component, operation)¶ Create extrude features of all profiles in a sketch
The new feature will be created in the given target component and extruded by a distance
- Parameters
sketch (
Sketch
) – The sketch from which to get profilesdistance (
float
) – The distance to extrude the profiles.component (
Component
) – The target component for the extrude featureoperation (
FeatureOperations
) – The feature operation type from enumerator.
- Return type
ExtrudeFeature
- Returns
The new extrude feature.
-
apper.Fusion360Utilities.
get_a_uuid
()¶ Gets a base 64 uuid
- Return type
str
- Returns
The id that was generated
-
apper.Fusion360Utilities.
get_default_dir
(app_name)¶ Creates a directory in the user’s home folder to store data related to this app
- Parameters
app_name (str) – Name of the Application
-
apper.Fusion360Utilities.
get_item_by_id
(this_item_id, app_name)¶ Returns an item based on the assigned ID set with
item_id
- Parameters
this_item_id (
str
) – The unique id generated originally by callingitem_id
app_name (
str
) – Name of the Application
- Return type
Base
- Returns
The Fusion 360 object that the id attribute was attached to.
-
apper.Fusion360Utilities.
get_log_file
(app_name)¶ Gets the filename for a default log file
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
get_log_file_name
(app_name)¶ Gets the filename for a default log file
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
get_settings_file
(app_name)¶ Create (or get) a settings file name in the default app directory
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
get_std_err_file
(app_name)¶ Get temporary stderr file for the app
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
get_std_out_file
(app_name)¶ Get temporary stdout file for the app
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
import_dxf
(dxf_file, component, plane, is_single_sketch_result=False)¶ Import dxf file with one sketch per layer.
- Parameters
dxf_file (
str
) – The full path to the dxf filecomponent (
Component
) – The target component for the new sketch(es)plane (
Union
[ConstructionPlane
,BRepFace
]) – The plane on which to import the DXF file.plane – The plane on which to import the DXF file.
is_single_sketch_result (
bool
) – If true will collapse all dxf layers to a single sketch.
- Return type
ObjectCollection
- Returns
An ObjectCollection of the created sketches
-
apper.Fusion360Utilities.
item_id
(item, group_name)¶ Gets (and possibly assigns) a unique identifier (UUID) to any item in Fusion 360
- Parameters
item (
Base
) – Any Fusion Object that supports attributesgroup_name (
str
) – Name of the Attribute Group (typically use app_name)
- Return type
str
- Returns
The id that was generated or was previously existing
-
class
apper.Fusion360Utilities.
lib_import
(app_path, library_folder='lib')¶ The lib_import class is a wrapper class to allow temporary import of a local library directory
By default it assumes there is a folder named ‘lib’ in the add-in root directory.
First install a 3rd party library (such as requests) to this directory.
# Assuming you are in the add-in root directory (sudo may not be required...) sudo python3 -m pip install -t ./lib requests
Then you can temporarily import the library before making a call to the requests function. To do this use the @apper.lib_import(…) decorator on a function that uses the library.
Here is an example function for using Requests:
@apper.lib_import(config.app_path) def make_request(url, headers): import requests r = requests.get(url, headers=headers) return r
- Parameters
app_path (str) – The root path of the addin. Should be dynamically calculated.
library_folder (
str
, optional) – Library folder name (relative to app root). Defaults to ‘lib’
-
apper.Fusion360Utilities.
open_doc
(data_file)¶ Simple wrapper to open a dataFile in the application window
- Parameters
data_file (
DataFile
) – The data file to open
-
apper.Fusion360Utilities.
read_settings
(app_name)¶ Read a settings file into the default directory for the app
- Parameters
app_name (
str
) – Name of the Application
-
apper.Fusion360Utilities.
rect_body_pattern
(target_component, bodies, x_axis, y_axis, x_qty, x_distance, y_qty, y_distance)¶ Creates rectangle pattern of bodies based on vectors
- Parameters
target_component (
Component
) – Component in which to create the paternbodies (
List
[BRepBody
]) – bodies to patternx_axis (
Vector3D
) – vector defining direction 1y_axis (
Vector3D
) – vector defining direction 2x_qty (
int
) – Number of instances in direction 1x_distance (
float
) – Distance between instances in direction 1y_qty (
int
) – Number of instances in direction 2y_distance (
float
) – Distance between instances in direction 2
- Return type
ObjectCollection
-
apper.Fusion360Utilities.
remove_item_id
(item, group_name)¶ Gets (and possibly assigns) a unique identifier (UUID) to any item in Fusion 360
- Parameters
item (
Base
) – Any Fusion Object that supports attributesgroup_name (
str
) – Name of the Attribute Group (typically use app_name)
- Return type
bool
- Returns
True if successful and False if it failed
-
apper.Fusion360Utilities.
sketch_by_name
(sketches, name)¶ Finds a sketch by name in a list of sketches
Useful for parsing a collection of sketches such as DXF import results.
- Parameters
sketches (
Sketches
) – A list of sketches. (Likely would be all sketches in active document).name (
str
) – The name of the sketch to find.
- Return type
Sketch
- Returns
The sketch matching the name if it is found.
-
apper.Fusion360Utilities.
start_group
()¶ Starts a time line group
- Return type
int
- Returns
The index of the adsk.fusion.Timeline where the adsk.fusion.TimelineGroup will begin
-
apper.Fusion360Utilities.
write_settings
(app_name, settings)¶ Write a settings file into the default directory for the app
- Parameters
app_name (
str
) – Name of the Applicationsettings (
dict
) – Stores a dictionary as a json string
Fusion360DebugUtilities.py¶
Utilities to aid in debugging a Fusion 360 Addin¶
- copyright
2019 by Patrick Rainsberry.
- license
Apache 2.0, see LICENSE for more details.
-
apper.Fusion360DebugUtilities.
get_log_file_name
()¶ Creates directory and returns file name for log file :param log: tbd
-
apper.Fusion360DebugUtilities.
perf_log
(log, function_reference, command, identifier='')¶ Performance time logging function :param log: :param function_reference: :param command: :param identifier:
-
apper.Fusion360DebugUtilities.
perf_message
(log)¶ Performance time logging function :param log: tbd
-
apper.Fusion360DebugUtilities.
variable_message
(variable, extra_info='')¶ Displays the value of any single variable as long as the value can be converted to text
- Parameters
variable – variable to print
extra_info – Any other info to display in the message box
-
apper.Fusion360DebugUtilities.
variables_message
(variables)¶ Print a list of list of variables
Format of variables should be [[Variable name 1, variable value 1], [Variable name 2, variable value 2], …]
- Parameters
variables (
list
) – A list of lists of any string based variables from your add-in.


Euro elite
Rangers third behind Man City and Ajax in Europe’s pass masters table with Celtic in top 10
by Alan TempleRANGERS are only behind Manchester City and Ajax in a ranking of Europe's pass masters, a new study has shown.
Swiss experts at the CIES Football Observatory have compared the 35 top leagues across the continents to find the most dominant sides in possession.
They have analysed which clubs have made the most successful passes in the opposition’s third of the field and cross-referenced that with the number of passes they have allowed in their own defensive third.
And the data shows that Steven Gerrard’s Rangers are flying high in third position.
The Light Blues have averaged 179 successful passes in their Premiership fixtures this term, while they have allowed just 59 in their own danger zone.
However, the accolade is no guarantee of results, with English champions Manchester City - currently trailing Liverpool, Leicester and Chelsea - in the race for the EPL title topping the list with 210 passes made compared to 59 allowed. Ajax (220/64) are in second spot.
Celtic also rank highly in seventh spot, with Neil Lennon’s side finding a team-mate 161 times in the final third and allowing just 64 from the opposition.
They are one place ahead of German giants Bayern Munich.
Spanish giants Barcelona rank well below the Old Firm duo coming in at 18th.
The stats make grim reading for Hamilton, who are remarkably rock-bottom of the table which covers the whole of Europe.
Accies average just 63 passes in the attacking third, while they allow 163.
Keep u p to date with ALL the latest news and transfers at the Scottish Sun football page


Values
The values I picked at the beginning of the phase0 were: Freedom, Friendships, Health, Justice and Growth. A couple weeks have passed and nothing has changed.
When I think of these values I feel proud, because no matter what the circumstances, I always stick to them. When it comes to Stereotype threat , I don't think much about it, and just do what I think is right.
When I feel down , I like to close my eyes and listen to music. It helps me relax and recharge my batteries. Its simple, but works.
06/07/2014


|
FreeRTOS port on GAP8/RISC-V
|
Macros | |
| #define | xMessageBufferCreate(xBufferSizeBytes) |
| #define | xMessageBufferCreateStatic(xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer) |
| #define | xMessageBufferSend(xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait) |
| #define | xMessageBufferSendFromISR(xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken) |
| #define | xMessageBufferReceive(xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait) |
| #define | xMessageBufferReceiveFromISR(xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken) |
| #define | vMessageBufferDelete(xMessageBuffer) |
| #define | xMessageBufferIsFull(xMessageBuffer) |
| #define | xMessageBufferIsEmpty(xMessageBuffer) |
| #define | xMessageBufferReset(xMessageBuffer) |
| #define | xMessageBufferSpaceAvailable(xMessageBuffer) |
| #define | xMessageBufferSpacesAvailable(xMessageBuffer) |
| #define | xMessageBufferNextLengthBytes(xMessageBuffer) |
| #define | xMessageBufferSendCompletedFromISR(xMessageBuffer, pxHigherPriorityTaskWoken) |
| #define | xMessageBufferReceiveCompletedFromISR(xMessageBuffer, pxHigherPriorityTaskWoken) |
Typedefs | |
| typedef void * | MessageBufferHandle_t |
| #define vMessageBufferDelete | ( | xMessageBuffer | ) |
void vMessageBufferDelete( MessageBufferHandle_t xMessageBuffer );
Deletes a message buffer that was previously created using a call to xMessageBufferCreate() or xMessageBufferCreateStatic(). If the message buffer was created using dynamic memory (that is, by xMessageBufferCreate()), then the allocated memory is freed.
A message buffer handle must not be used after the message buffer has been deleted.
| xMessageBuffer | The handle of the message buffer to be deleted. |
| #define xMessageBufferCreate | ( | xBufferSizeBytes | ) |
| #define xMessageBufferCreateStatic | ( | xBufferSizeBytes, | |
| pucMessageBufferStorageArea, | |||
| pxStaticMessageBuffer | |||
| ) |
| #define xMessageBufferIsEmpty | ( | xMessageBuffer | ) |
BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer ) );
Tests to see if a message buffer is empty (does not contain any messages).
| xMessageBuffer | The handle of the message buffer being queried. |
| #define xMessageBufferIsFull | ( | xMessageBuffer | ) |
BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer ) );
Tests to see if a message buffer is full. A message buffer is full if it cannot accept any more messages, of any size, until space is made available by a message being removed from the message buffer.
| xMessageBuffer | The handle of the message buffer being queried. |
| #define xMessageBufferNextLengthBytes | ( | xMessageBuffer | ) |
| #define xMessageBufferReceive | ( | xMessageBuffer, | |
| pvRxData, | |||
| xBufferLengthBytes, | |||
| xTicksToWait | |||
| ) |
| #define xMessageBufferReceiveCompletedFromISR | ( | xMessageBuffer, | |
| pxHigherPriorityTaskWoken | |||
| ) |
| #define xMessageBufferReceiveFromISR | ( | xMessageBuffer, | |
| pvRxData, | |||
| xBufferLengthBytes, | |||
| pxHigherPriorityTaskWoken | |||
| ) |
| #define xMessageBufferReset | ( | xMessageBuffer | ) |
| #define xMessageBufferSend | ( | xMessageBuffer, | |
| pvTxData, | |||
| xDataLengthBytes, | |||
| xTicksToWait | |||
| ) |
| #define xMessageBufferSendCompletedFromISR | ( | xMessageBuffer, | |
| pxHigherPriorityTaskWoken | |||
| ) |
| #define xMessageBufferSendFromISR | ( | xMessageBuffer, | |
| pvTxData, | |||
| xDataLengthBytes, | |||
| pxHigherPriorityTaskWoken | |||
| ) |
| #define xMessageBufferSpaceAvailable | ( | xMessageBuffer | ) |
| #define xMessageBufferSpacesAvailable | ( | xMessageBuffer | ) |
| typedef void* MessageBufferHandle_t |
Type by which message buffers are referenced. For example, a call to xMessageBufferCreate() returns an MessageBufferHandle_t variable that can then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(), etc.


Home
Logout
Your playlists
My Playlist
Friend's Playlist
Create New Playlist
Sr.No
Play List Title
Delete Playlist
something
Sr.No
Play List Title
something
Create New PlayList
Create


Jimmy is living in Taipei, Tawan
Bachelors in Internaional Business, SCU
Global Strategic Sourcing Intern
• Applied big data methodology and analyzed customer behavior based on AI online advertising strategies; successfully increase the specifics merchandises into 2 times revenue.
• Designed different projects and campaigns to increase website impression for higher conversion rate, by analyzing, comparing, and inquiring related sources.
• Led SCU team to compete with 540 teams, being top thirteen groups to represent Taiwan Bar Co., a new online media focusing on education topics.
• Designed a physical magazine to increase traffic from offline to online, and set up strategies to cooperate with public high school to expand the user base.
• Proposed to Starbucks a new business model to generate new revenue stream by developing a sub-brand, which targeted a customer who would pursue high efficiency but also high quality drinks.
• Being able to reach consensus among people with strong and opinionated personality.
• Developed a banking APP equipped with location based services, offering customers precisely the best merchant deals, which enhanced the stickiness of customers to the bank and the APP.
• Created synergy between consumer banking and corporate banking business.


--- layout: 3 ---
There are many variations passages of Lorem Ipsum available, bmaority have suffered alteration
There are many variations passages of Lorem Ipsum available, bmaority have suffered alteration
There are many variations passages of Lorem Ipsum available, bmaority have suffered alteration
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that more-or-less normal distribution of letters, as opposed to using'Content here,content here',making it look like readable English. Many desktop puhing packages and web page editors now.
Contrary to popular belief, Lorem Ipsum is not simply random text.  It uses a dictionary of over 200 Latin words,
ONLY $39.00 BUY NOWThere are many variations of passages of Lorem Ipsum available, but the majority have suffered alteation in some form, by injected humour, or randomised words which don't look even
On the other hand, we denounce with riition and dislike men who are so beguiled aorized by the charms of pleasure.
On the other hand, we denounce with riition and dislike men who are so beguiled aorized by the charms of pleasure.
On the other hand, we denounce with riition and dislike men who are so beguiled aorized by the charms of pleasure.


%!
from smisk.serialization import serializers
%>
Kittens: ${u'.'.join(['root'] + app.destination.path)|h}
${u'.'.join(['root'] + app.destination.path)|h}
${self.body()}
Active leaf: ${app.destination.canonical_leaf|h}.
Variants:
% for serializer in serializers:
${serializer.name|h},
% endfor


CFB 150: Sporting News celebrates college football's greatest names, games and more
Sporting News celebrates the best names, games and moments in college football history. Let the arguments begin!
by @BillBender92College football is celebrating its 150th season this year — a remarkable nod to the great games, names and pageantry associated with one of America’s favorite sports.
Sporting News is celebrating that history, too. Each week during the 2019 season, we will release a top-10 list honoring 15 different categories. Who is the top quarterback of all time? What is the greatest in-game tradition? What about the best Hail Mary?
Ourpanel will vote on a top 10 each week — and believe us, one look at the thread and you know these are some of the most-passionate arguments possible.
Greatest nicknames
1. Red Grange, 'The Galloping Ghost,' Illinois (1923-25)
When a guy is riding two nicknames at once, as Harold Grange did through his years with the Fighting Illini, he’s probably special. Red is rather common, has been the preferred name for such sporting hall of famers as Albert Schoendienst, Johnny Kerr and Gordon Berenson. No one ever wore that nickname as famously as Grange, who revolutionized interest in college football and then helped ignite the nation’s passion for the burgeoning NFL. ...
MORE: Top 10 best nicknames
Greatest individual seasons
1. Barry Sanders, RB, Oklahoma State (1988)
Stats: 2,628 rushing yards, 37 rushing touchdowns, 515 kick/punt return yards, two return touchdowns
Sanders put together a dazzling Heisman Trophy-winning season that will be hard for any running back — or any other player at any other position — to best. His record rushing yardage has been challenged by players who've had more games to make a run at it, but it remains one of the most unbreakable marks in college football, 31 years later. That's saying something, considering the game's evolution to more favor the offense. ...
MORE: Top 10 individual single seasons
Greatest quarterbacks
1. Tim Tebow, Florida (2006-09)
Tebow played a part-time role on the 2006 national championship team before a three-year run of dominance in which he finished 35-6 as a starter and lost just two games over his junior and senior seasons. He had the stats, compiling 12,232 yards of offense and 145 total touchdowns over his four-year career. He had the accolades, winning the Manning and Davey O’Brien awards and twice winning the Maxwell Award. ...
MORE: Top 10 quarterbacks of all time
Greatest Hail Marys
1. "Hail Flutie"
Miami and Boston College met on Black Friday in a wild shootout between future NFL stars Bernie Kosar and Doug Flutie. Kosar threw for 447 yards for the Hurricanes, but still left time for Flutie to run “55 Flood Tip” in the final seconds. Flutie scrambled right to avoid the pass-rush and lofted a perfect ball over a mob of Boston College and Miami players, into the arms of Gerard Phelan on the ground. The trajectory of Flutie’s 48-yard touchdown was perfect, and his reaction in the aftermath of the touchdown is one of college football's most iconic moments. ...
MORE: Top 10 Hail Marys of all time
Greatest running backs
1. Herschel Walker, Georgia (1980-82)
"My God, a freshman!"
And with that legendary call by Larry Munson, Herschel Walker would forever be a part of college football lore. Tennessee’s Bill Bates is unenviably remembered for his failure to tackle Walker, but no defender fared much better against the powerful runner from Wrightsville, Ga. He captured the nation’s attention like no one else, blending track speed and great strength in a fearsome 6-1, 225-pound frame. He played three seasons at Georgia, and was a unanimous All-American in every one. As a freshman in 1980, he helped the Bulldogs win their first national title in 38 years with a 1,616-yard season. ...
MORE: Top 10 running backs of all time
Greatest arguments
1. Should Tom Osborne have gone for two?
Nebraska had been almost unchallenged in the 1983 season when it entered the Orange Bowl against No. 5 Miami. The Huskers destroyed reigning national champion Penn State in the opener and beat every opponent, save Oklahoma and Oklahoma State, by at least three touchdowns. All they needed to do to win the national championship was defeat independent Miami; some said all Nebraska needed to do was tie the Hurricanes. ...
Cornhuskers coach Tom Osborne, however, was not one of those people.
MORE: Greatest arguments
Greatest movies
1. "Rudy" (1993)
"I've been ready for this my whole life." That's the story of Rudy Ruettiger, the five-foot nothin', 100-and-nothin' Notre Dame walk-on who made it his life's mission to walk out of the tunnel for the Fighting Irish. Critics will denounce the story with one-liners like, "Rudy was offsides" or dismiss it as Notre Dame propaganda. But it's a truly remarkable film from start to finish. ...
MORE: Top 10 college football movies
Greatest traditions
1. Army-Navy: "The March On/Honoring the Fallen"
When the Black Knights and Midshipmen meet, there's no team either side would rather beat. But the teams also know they're both playing for our nation, and all across America it's a standing ovation. First the men and women fill tightly the stands, marching in the most patriotic of bands. When the game is over there are no winners and losers here, just a mutual feeling of respect so dear. ...
MORE: Top 10 college football traditions
Greatest plays
1. "The Play"
If a play is so well-known, so ubiquitous and so astounding that it can simply be called "The Play," then you know you're dealing with the best in the history of college football. So it is with the finish of the 1982 iteration of the "Big Game." With 4 seconds left and Stanford leading 20-19, the Cardinal attempted a squib kick from their 20 after a 15-yard penalty on a last-second touchdown. Stanford kicker Mark Harmon squibbed the kick to the Golden Bears' Kevin Moen, who was one of only 10 men Cal fielded for "The Play." ...
MORE: Top 10 plays
Greatest coaches
1. Nick Saban, Alabama
One of the curiosities of Saban’s dominance is that, despite his seven championships, he has enjoyed only a single undefeated season, in 2009, when the Tide averaged nearly a three-touchdown winning margin and wrecked Texas in the BCS championship game. But he also has never endured a losing season and rung up double-digit victories for 11 (soon to be 12) consecutive years. Throughout that stretch, every one of those teams reached the No. 1 poll ranking during the season, and five finished on top. ...
MORE: Top 10 coaches of all time
Greatest impact games
No. 1: No. 1 Miami vs. No. 2 Penn State (Jan. 2, 1987)
The college football landscape was different in 1987. Both Penn State and Miami were independent programs. The Fiesta Bowl was not considered a major bowl in the same vein as the Cotton, Sugar, Rose and Orange. In that sense, there was nothing traditional about this matchup. The Fiesta Bowl not only landed the Nittany Lions and Hurricanes, but also moved the game from its customary date on New Year's Day to Jan. 2 so it would be separated from those tradition-steeped bowls. Of course, the culture clash between Penn State and Miami followed — the Hurricanes walked off the plane in military fatigues and staged a walkout at a joint team dinner after Penn State players poked fun at Miami players in a skit. You can still hear Jerome Brown ask, "Did the Japanese go and sit down and have dinner with Pearl Harbor before they bombed 'em?" Game on....
MORE: Top 10 impact games
Greatest walk-ons
1. Baker Mayfield, QB, Oklahoma
Mayfield is the standard when it comes to college football walk-ons. He walked on twice at two different programs — at Texas Tech in 2013, then Oklahoma in 2014. Mayfield left the Red Raiders after the 2013 season, feeling he’d earned the right to a scholarship. He walked on to Bob Stoops’ team in 2014 — without contacting the staff — then proceeded to become one of the Sooners' most accomplished quarterbacks of all time, compiling 13,185 total yards, 137 total touchdowns and an absurd 189.4 passer rating. ...
MORE: Top 10 walk-ons
Greatest players
No. 1: Herschel Walker, RB, Georgia
Larry Munson's call still rings in every college football's fans ears — and perhaps Tennessee's Bill Bates' too — when Walker is mentioned. "My God, a freshman." It was that freshman season that elevated the running back era of the 1970s to the next level. Walker led Georgia to a national championship with 1,616 yards and 15 touchdowns in 1980, finishing third in the Heisman voting. That was just the start of a prolific career. ...