Staking Collection

[Previous << NFT Storefront](https://qiita.com/flowcadence/items/93a05e653883a93b617a)
[Next >> Account Linking](https://qiita.com/flowcadence/items/59158ab2b64af5844082)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-developers

<h1>Contract</h1>

`FlowStakingCollection`コントラクトは、ユーザーのステーキングとデリゲーションオブジェクトを含むリソースを管理するスマートコントラクトです。

`FlowStakingCollection`は、ユーザーが複数のアクティブなノードまたは委任者を管理することを可能にし、任意でロックされたアカウントの中、又は（メインアカウントに保存された）StakingCollection自体の中(どちらか)に保存された、ノードや委任者オブジェクトとやりとりすることを可能にします。ユーザーがトークンをロックしている場合、StakingCollectionは、ユーザーがロックされたトークンとやりとりし、ノードまたは委任者のいずれかに対してステーキングアクションを実行することを可能にします。

ステーキングコレクションは、それがコレクターやコンセンサスノードを持つ場合、ノードのマシンアカウントの作成も管理します。また、ステーキングコレクションを通じて、マシンアカウントからトークンの預け入れや引き出しを行うこともできます。

ステーキングコレクションコントラクトの設計に関する詳細は、[ステーキングコレクションのドキュメント](https://developers.flow.com/networks/staking/staking-collection)を参照してください。

Source: [FlowStakingCollection.cdc](https://github.com/onflow/flow-core-contracts/blob/master/contracts/FlowStakingCollection.cdc)

| Network | Contract Address |
|:-:|:-:|
| Emulator | `0xf8d6e0586b0a20c7` |
| Cadence Testing Framework | `0x0000000000000001` |
| Testnet | `0x95e019a17d0e23d7` |
| Mainnet | `0x8d0e87b65159ae63` |

<h1>Transactions</h1>

StakingCollectionとやり取りするには、以下のトランザクションを使用します。

_Note: StakingCollectionは、任意のDelegatorID引数を渡すことで、ステーキングと委任リクエストを区別します。例えば、もしあなたがアクティブなノードに対して新規トークンのステーキングを行う場合は、オプションのDelegatorID引数として`nil`をStake New Tokens トランザクションに渡します。他のすべてのステーキング操作のトランザクションについても同様です。

| ID | Name | Source |
|:-:|:-:|:-:|
| `SCO.01` | Setup Staking Collection | [stakingCollection/setup_staking_collection.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/setup_staking_collection.cdc) |
| `SCO.02` | Register Delegator | [stakingCollection/register_delegator.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/register_delegator.cdc) |
| `SCO.03` | Register Node | [stakingCollection/register_node.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/register_node.cdc) |
| `SCO.04` | Create Machine Account | [stakingCollection/create_machine_account.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/create_machine_account.cdc) |
| `SCO.05` | Request Unstaking | [stakingCollection/request_unstaking.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/request_unstaking.cdc) |
| `SCO.06` | Stake New Tokens | [stakingCollection/stake_new_tokens.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/stake_new_tokens.cdc) |
| `SCO.07` | Stake Rewarded Tokens | [stakingCollection/stake_rewarded_tokens.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/stake_rewarded_tokens.cdc) |
| `SCO.08` | Stake Unstaked Tokens | [stakingCollection/stake_unstaked_tokens.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/stake_unstaked_tokens.cdc) |
| `SCO.09` | Unstake All | [stakingCollection/unstake_all.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/unstake_all.cdc) |
| `SCO.10` | Withdraw Rewarded Tokens | [stakingCollection/withdraw_rewarded_tokens.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/withdraw_rewarded_tokens.cdc) |
| `SCO.11` | Withdraw Unstaked Tokens | [stakingCollection/withdraw_unstaked_tokens.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/withdraw_unstaked_tokens.cdc) |
| `SCO.12` | Close Stake | [stakingCollection/close_stake.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/close_stake.cdc) |
| `SCO.13` | Transfer Node | [stakingCollection/transfer_node.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/transfer_node.cdc) |
| `SCO.14` | Transfer Delegator | [stakingCollection/transfer_delegator.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/transfer_delegator.cdc) |
| `SCO.15` | Withdraw From Machine Account | [stakingCollection/withdraw_from_machine_account.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/withdraw_from_machine_account.cdc) |
| `SCO.22` | Update Networking Address | [stakingCollection/update_networking_address.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/update_networking_address.cdc) |

<h1>Scripts</h1>

| ID | Name | Source |
|:-:|:-:|:-:|
| `SCO.16` | Get All Delegator Info | [	stakingCollection/scripts/get_all_delegator_info.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_all_delegator_info.cdc) |
| `SCO.15` | Get All Node Info | [stakingCollection/scripts/get_all_node_info.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_all_node_info.cdc) |
| `SCO.22` | Get Delegator Ids | [stakingCollection/scripts/get_delegator_ids.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_delegator_ids.cdc) |
| `SCO.17` | Get Node Ids | [stakingCollection/scripts/get_node_ids.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_node_ids.cdc) |
| `SCO.18` | Get Does Stake Exist | [stakingCollection/scripts/get_does_stake_exist.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_does_stake_exist.cdc) |
| `SCO.19` | Get Locked Tokens Used	 | [stakingCollection/scripts/get_locked_tokens_used.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_locked_tokens_used.cdc) |
| `SCO.20` | Get Unlocked Tokens Used | [stakingCollection/scripts/get_unlocked_tokens_used.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_unlocked_tokens_used.cdc) |
| `SCO.21` | Get Machine Accounts | [stakingCollection/scripts/get_machine_accounts.cdc](https://github.com/onflow/flow-core-contracts/blob/master/transactions/stakingCollection/scripts/get_machine_accounts.cdc) |

<h1>Setup Transaction</h1>

アカウントにステーキングコレクション(Staking Collection)を設定するには、`SC.01` トランザクションを使用します。

セットアップ過程では、メインアカウントのストレージの中に保存されているノードやdelegatorレコードが検索されます。また、関連するロックされたアカウントが存在する場合、そのアカウントのノードやdelegatorレコードについても検索されます。それは、これらのノードや委任者レコードを新しいステーキングコレクション(Staking Collection)に接続し、ステーキングコレクションAPIを使用することでそれらを相互にやり取りできるようにします。
<h1>Events</h1>

`StakingCollection`コントラクトは、重要なアクションが発生するたびにイベントを発行します。
```ruby
    access(all) event NodeAddedToStakingCollection(nodeID: String, role: UInt8, amountCommitted: UFix64, address: Address?)
    access(all) event DelegatorAddedToStakingCollection(nodeID: String, delegatorID: UInt32, amountCommitted: UFix64, address: Address?)

    access(all) event NodeRemovedFromStakingCollection(nodeID: String, role: UInt8, address: Address?)
    access(all) event DelegatorRemovedFromStakingCollection(nodeID: String, delegatorID: UInt32, address: Address?)

    access(all) event MachineAccountCreated(nodeID: String, role: UInt8, address: Address)
```

*Last updated on **Dec 17, 2024** by **j pimmel***

翻訳元

https://developers.flow.com/build/core-contracts/staking-collection

***

<b>[Previous << NFT Storefront](https://qiita.com/flowcadence/items/93a05e653883a93b617a)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Staking Collection)

<b>[Next >> Account Linking](https://qiita.com/flowcadence/items/59158ab2b64af5844082)</b>