Skip to content

Commit

Permalink
add linear code address generator
Browse files Browse the repository at this point in the history
  • Loading branch information
turbolent committed Feb 3, 2025
1 parent d7f11be commit d410e55
Showing 1 changed file with 60 additions and 52 deletions.
112 changes: 60 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,27 @@ Flow is a new blockchain for open worlds. Read more about it [here](https://www.

# What is Cadence?

Cadence is a new Resource-oriented programming language
Cadence is a new Resource-oriented programming language
for developing smart contracts for the Flow Blockchain.
Read more about it [here](https://www.docs.onflow.org)

We recommend that anyone who is reading this should have already
completed the [Cadence Tutorials](https://docs.onflow.org/docs/getting-started-1)
completed the [Cadence Tutorials](https://docs.onflow.org/docs/getting-started-1)
so they can build a basic understanding of the programming language.

## FlowToken

`contracts/FlowToken.cdc`

| Network | Contract Address |
| ---------------------------- | -------------------- |
| Emulator | `0x0ae53cb6e3f42a79` |
| Testnet | `0x7e60df042a9c0868` |
| Mainnet | `0x1654653399040a61` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0x0ae53cb6e3f42a79` |
| Testnet | `0x7e60df042a9c0868` |
| Mainnet | `0x1654653399040a61` |

This is the contract that defines the network token for Flow.
This token is used for account creation fees, transaction fees, staking, and more. It is
implemented as a regular smart contract so that it can be easily used
This is the contract that defines the network token for Flow.
This token is used for account creation fees, transaction fees, staking, and more. It is
implemented as a regular smart contract so that it can be easily used
just like any other token in the network. See the [flow fungible token repository](https://github.com/onflow/flow-ft)
for more information.

Expand All @@ -43,23 +43,23 @@ You can find transactions for using the Flow Token in the `transactions/flowToke

`contracts/FlowFees.cdc`

| Network | Contract Address |
| ---------------------------- | -------------------- |
| Emulator | `0xe5a8b7f23e8b548f` |
| Testnet | `0x912d5440f7e3769e` |
| Mainnet | `0xf919ee77447b7497` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xe5a8b7f23e8b548f` |
| Testnet | `0x912d5440f7e3769e` |
| Mainnet | `0xf919ee77447b7497` |

This contract defines fees that are spent for executing transactions and creating accounts.

## Storage Fee Contract

`contracts/FlowStorageFees.cdc`

| Network | Contract Address |
| ---------------------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |

This contract defines fees that are spent to pay for the storage that an account uses.
There is a minimum balance that an account needs to maintain in its main `FlowToken` Vault
Expand All @@ -70,11 +70,11 @@ You can see [more docs about storage capacity and fees here.](https://docs.onflo

`contracts/FlowServiceAccount.cdc`

| Network | Contract Address |
| ---------------------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |

This contract manages account creation and flow token initialization. It enforces temporary
requirements for which accounts are allowed to create other accounts, and provides common
Expand All @@ -86,11 +86,11 @@ You can find transactions for interacting with the service account contract in t

`contracts/RandomBeaconHistory.cdc`

| Network | Contract Address |
| ---------------------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |

This contract stores the history of random sources generated by
the Flow network. The defined Heartbeat resource is
Expand All @@ -104,11 +104,11 @@ You can find transactions for interacting with the random beacon

`contracts/NodeVersionBeacon.cdc`

| Network | Contract Address |
| ----------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x8c5303eaa26202d6` |
| Mainnet | `0xe467b9dd11fa00df` |

The `NodeVersionBeacon` contract holds the past
and future protocol versions that should be used
Expand All @@ -122,11 +122,11 @@ history contract in the `transactions/nodeVersionBeacon` directory.
`contracts/FlowIDTableStaking.cdc`
`contracts/epochs/FlowEpoch.cdc`

| Network | Contract Address |
| ------------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x9eca2b38b18b5dfe` |
| Mainnet | `0x8624b52f9ddcd04a` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x9eca2b38b18b5dfe` |
| Mainnet | `0x8624b52f9ddcd04a` |

These contract manages the list of identities that correspond to node operators in the Flow network
as well as the process for adding and removing nodes from the network via Epochs.
Expand All @@ -152,11 +152,11 @@ These scripts are documented in the [staking scripts section of the docs](https:

`contracts/LockedTokens.cdc`

| Network | Contract Address |
| --------------- | -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x95e019a17d0e23d7` |
| Mainnet | `0x8d0e87b65159ae63` |
| Network | Contract Address |
| ---------| -------------------- |
| Emulator | `0xf8d6e0586b0a20c7` |
| Testnet | `0x95e019a17d0e23d7` |
| Mainnet | `0x8d0e87b65159ae63` |

This contract manages the two year lockup of Flow tokens that backers purchased in the initial
token sale in October of 2020. See more documentation about `LockedTokens` [here.](https://docs.onflow.org/flow-token/locked-account-setup/)
Expand Down Expand Up @@ -195,16 +195,24 @@ then all the changes are handled for them and there is nothing for you to worry

### Staking Collection Technical features

* The staking collection contract stores [a dictionary of staking objects](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowStakingCollection.cdc#L68) from the staking contract that are used to manage the stakers tokens. Since they are dictionaries, there can be as many node or delegator objects per account as the user wants.
* The staking collection contract stores [a dictionary of staking objects](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowStakingCollection.cdc#L68) from the staking contract that are used to manage the stakers tokens. Since they are dictionaries, there can be as many node or delegator objects per account as the user wants.
* The resource only has one set of staking methods, which route the call to the correct staking object based on the arguments that the caller specifies. (nodeID, delegatorID)
* The contract also stores an [optional capability to the locked token vault](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowStakingCollection.cdc#L63) and [locked tokens `TokenHolder` resource](https://github.com/onflow/flow-core-contracts/blob/master/ontracts/FlowStakingCollection.cdc#L73). This is only used if the user already has a locked account. The staking collection does not change the locked account setup at all, it only has access to it and to the locked vault.
* The collection makes the staking objects and vault capability fields private, because since it has access to the locked tokens, it needs to mediate access to the staking objects so users cannot withdraw tokens that are still locked from the sale. The resource has fields `unlockedTokensUsed` and `lockedTokensUsed`, to keep track of how many locked and unlocked tokens are being used for staking in order to allow the user to withdraw the correct amount when they choose to.
* The staking collection contract is a brand new contract that will be deployed to the same account as the existing locked tokens contract. A few of the fields on the `LockedTokens` contract have been updated to have `access(account)` visibility instead of `access(self)` because the staking collection contract needs to be able to access to them in order to work properly.
* We also included a public interface and getters in the contract so you can easily query it with an address to get node or delegator information from a collection.
* We also included a public interface and getters in the contract so you can easily query it with an address to get node or delegator information from a collection.

Looking for feedback on design decisions, implementation details, any events that would be useful to include in the contract, and whatever you feel is important!

We intend for this to be the method that all Flow Port users (ledger, blocto, etc) use for the forseeable future. When we enable it in Flow Port, we will ask every user to run a transaction to set up their account to use the staking collection from then on.
We intend for this to be the method that all Flow Port users (ledger, blocto, etc) use for the forseeable future. When we enable it in Flow Port, we will ask every user to run a transaction to set up their account to use the staking collection from then on.

## Linear Code Address Generator

`contracts/LinearCodeAddressGenerator.cdc`

The linear code address generator contract allows translating an address index to an address,
and and address back to an address index.
It implements the same address generation logic as used on all Flow networks.

# Testing

Expand All @@ -218,22 +226,22 @@ Flow Core Contracts were audited by Quantstamp in July 2021: [final report](http

# Getting Transaction Templates

If you need to use the contracts and transaction templates we have provided in an app, you don't necessarily
If you need to use the contracts and transaction templates we have provided in an app, you don't necessarily
need to copy and paste them into your code. We plan on providing packages for different
languages to import in order to use the transactions instead of copying and pasting.

We currently include the `lib/go/templates` package for getting templates in the Go programming language.
To use this package, run `go get github.com/onflow/flow-core-contracts/lib/go/templates@{latest version}`
in your Go project direcory. To use it in your Go code, you can simply call one of the many
template getters in one of the `*_templates.go` files.
in your Go project direcory. To use it in your Go code, you can simply call one of the many
template getters in one of the `*_templates.go` files.

### Packages in other languages

We would like to add new packages for other popular languages to get transaction templates.
If you would like to contribute to add one of these new packages, please reach out
to the team and we would be happy to help!

## License
## License

The works in these folders are under the [Unlicense](https://github.com/onflow/flow-core-contracts/blob/master/LICENSE):

Expand Down

0 comments on commit d410e55

Please sign in to comment.