Build a Complex Transaction

[Previous << Build a Transaction](https://qiita.com/flowcadence/items/1ac123c6604ce19612d6)
[Next >> Sign a Transaction](https://qiita.com/flowcadence/items/27ad947391e383ec6e40)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-cli-と-fcl

**Simple Transactions**

Flow CLI を使用してトランザクションを送信するには、[ここに記載されているsendコマンド](https://qiita.com/flowcadence/items/8a5bcb87dc291815532d)を使用するだけで実現できます。

**Complex Transactions**

より複雑なトランザクションを構築したい場合は、Flow CLIが提供するコマンドを使用して、トランザクションの構築、署名、送信を行うことができます。これにより、異なる承認者、署名者、提案者を指定することができます。

複雑なトランザクションの送信プロセスには、以下の3つのステップが含まれます。
1. [build a transaction](https://qiita.com/flowcadence/items/1ac123c6604ce19612d6)
1. [sign the built transaction](https://qiita.com/flowcadence/items/27ad947391e383ec6e40)
1. [send signed transaction](https://qiita.com/flowcadence/items/f87b20072a4a66f15e23)

各コマンドのフラグと引数については、上記のリンク先で詳細をご確認ください。

<h1>Examples</h1>

ここでは、複雑なトランザクションの一般的な例を説明します。すべての例は、[example configuration](#configuration)を使用しています。

<h3>Single payer, proposer and authorizer</h3>

最もシンプルなFlow トランザクションでは、単一のアカウントを提案者、支払者、承認者として宣言します。

Build the transaction:
```ruby
> flow transactions build tx.cdc 
  --proposer alice 
  --payer alice 
  --authorizer alice 
  --filter payload --save tx1
```
Sign the transaction:
```ruby
> flow transactions sign tx1 --signer alice 
  --filter payload --save tx2
```
Submit the signed transaction:
```ruby
> flow transactions send-signed tx2
```
Transaction content (`tx.cdc`):
```ruby
transaction {
    prepare(signer: &Account) {}
    execute { ... }
}
```
<h3>Single payer and proposer, multiple authorizers</h3>

同じ支払者および提案者と宣言するトランザクションだが、トランザクションに署名するには複数の承認者が必要となります。署名の順序が重要であり、[支払者は最後に署名しなければならない](https://qiita.com/flowcadence/items/6393a2af33f82475a7ca#payer-signs-last)ことに注意してください。

Build the transaction:
```ruby
> flow transactions build tx.cdc 
  --proposer alice
  --payer alice
  --authorizer bob
  --authorizer charlie 
  --filter payload --save tx1
```
Sign the transaction with authorizers:
```ruby
> flow transactions sign tx1 --signer bob
  --filter payload --save tx2
```
```ruby
> flow transactions sign tx2 --signer charlie
  --filter payload --save tx3
```
Sign the transaction with payer:
```ruby
> flow transactions sign tx3 --signer alice
  --filter payload --save tx4
```
Submit the signed transaction:
```ruby
> flow transactions send-signed tx4
```
Transaction content (`tx.cdc`):
```ruby
transaction {
    prepare(bob: &Account, charlie: &Account) {}
    execute { ... }
}
```
<h3>Different payer, proposer and authorizer</h3>

異なる支払者、提案者、承認者がそれぞれ個別に署名することを宣言するトランザクション。署名の順序が重要であり、[支払者は最後に署名しなければならない](https://qiita.com/flowcadence/items/6393a2af33f82475a7ca#payer-signs-last)ことにご注意ください。

Build the transaction:
```ruby
> flow transactions build tx.cdc 
  --proposer alice 
  --payer bob 
  --authorizer charlie 
  --filter payload --save tx1
```
Sign the transaction with proposer:
```ruby
> flow transactions sign tx1 --signer alice 
  --filter payload --save tx2
```
Sign the transaction with authorizer:
```ruby
> flow transactions sign tx2 --signer charlie 
  --filter payload --save tx3
```
Sign the transaction with payer:
```ruby
> flow transactions sign tx3 --signer bob 
  --filter payload --save tx4
```
Submit the signed transaction:
```ruby
> flow transactions send-signed tx4
```
Transaction content (`tx.cdc`):
```ruby
transaction {
    prepare(charlie: &Account) {}
    execute { ... }
}
```
<h3>Single payer, proposer and authorizer but multiple keys</h3>

同じ支払者、提案者、承認者を宣言するトランザクションだが、署名者アカウントには2つの鍵があり、それぞれ半分の重みであるので、その2つの鍵が必要である。

Build the transaction:
```ruby
> flow transactions build tx.cdc 
  --proposer dylan1 
  --payer dylan1
  --authorizer dylan1 
  --filter payload --save tx1
```
Sign the transaction with the first key:
```ruby
> flow transactions sign tx1 --signer dylan1 
  --filter payload --save tx2
```
Sign the transaction with the second key:
```ruby
> flow transactions sign tx2 --signer dylan2 
  --filter payload --save tx3
```
Submit the signed transaction:
```ruby
> flow transactions send-signed tx3
```
Transaction content (`tx.cdc`):
```ruby
transaction {
    prepare(signer: &Account) {}
    execute { ... }
}
```
<h3>Configuration</h3>

これは、擬似的な(モック)値を使用した設定例です。
```ruby
{
    ... 
    "accounts": {
        "alice": {
            "address": "0x1",
            "key": "111...111"
        },
        "bob": {
            "address": "0x2",
            "key": "222...222"
        },
        "charlie": {
            "address": "0x3",
            "key": "333...333"
        },
        "dylan1": {
            "address": "0x4",
            "key": "444...444"
        },
        "dylan2": {
            "address": "0x4",
            "key": "555...555"
        }
    }
    ...
}
```

*Last updated on **Dec 11, 2024** by **Chase Fleming***

翻訳元

https://developers.flow.com/tools/flow-cli/transactions/complex-transactions

***
<b>[Previous << Build a Transaction](https://qiita.com/flowcadence/items/1ac123c6604ce19612d6)
</b>

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

<b>[Next >> Sign a Transaction](https://qiita.com/flowcadence/items/27ad947391e383ec6e40)</b>