Skip to content

Conversation

@vsavchyn-dev
Copy link
Contributor

This pull request closes #197, adding support for submitting transactions of type Action::FunctionCall and Action::Transfer as FunctionCall and Transfer DAO proposal kinds respectfully.

Therefore, by writing:

near \
  tokens devhub.sputnik-dao.near \
  send-near receiver.near 10N \
  network-config mainnet \
  submit-dao-proposal dao-member.near \
  'dao description' \
  prepaid-gas '100.0 Tgas' \
  attached-deposit 1N \
  sign-with-keychain \
  send

You can construct Transfer dao proposal:

signer_id:    dao-member.near
receiver_id:  devhub.sputnik-dao.near
actions:
       -- function call:      
                       method name:  add_proposal
                       args:         {
                                       "proposal": {
                                         "description": "dao description",
                                         "kind": {
                                           "Transfer": {
                                             "amount": "10000000000000000000000000",
                                             "msg": null,
                                             "receiver_id": "receiver.near",
                                             "token_id": ""
                                           }
                                         }
                                       }
                                     }
                       gas:          100.0 Tgas
                       deposit:      1 NEAR

Added things:

DAO Proposal Functionality:

  • Added a new module submit_dao_proposal in src/transaction_signature_options/mod.rs to support converting transactions into DAO proposals. This includes defining the DaoProposal structure and its associated arguments, contexts, and signing options.
  • Implemented ProposalKind enum in src/transaction_signature_options/submit_dao_proposal/dao_kind_arguments.rs to handle different types of DAO proposal arguments, such as Transfer and FunctionCall.

Argument Decoding:

  • Added a deep_decode_args function in src/common.rs for print_unsigned_transaction function to recursively decode base64-encoded arguments in JSON objects. This ensures nested arguments are properly decoded, so person who submits things can see all sub-arguments in human-readable text, and not in base64.

Dependency Updates:

  • Added new dependencies base64 and serde_with to Cargo.toml for handling base64 encoding/decoding and advanced serialization/deserialization (it was already included to other dependencies).

Utility Enhancements:

  • Added a from_near method to the NearToken type in src/types/near_token.rs.

Copy link
Collaborator

@frol frol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vsavchyn-dev Niiice! This looks really good and already works mostly fine. I would like to only ask to address the minor review requests and we are good to go!

also removed `from_near` inside `src/types/near_token.rs` as it is not used anymore
Copy link
Collaborator

@frol frol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@race-of-sloths score 13

@race-of-sloths
Copy link

race-of-sloths commented Jun 14, 2025

@vsavchyn-dev Thank you for your contribution! Your pull request is now a part of the Race of Sloths!
New Sloth joined the Race! Welcome!

Shows inviting banner with latest news.

Shows profile picture for the author of the PR

Current status: executed
Reviewer Score
@frol 13

Your contribution is much appreciated with a final score of 13!
You have received 150 (130 base + 10 weekly bonus + 10 monthly bonus) Sloth points for this contribution

@frol received 25 Sloth Points for reviewing and scoring this pull request.

Congratulations @vsavchyn-dev! Your PR was highly scored and you completed another monthly streak! To keep your monthly streak make another pull request next month and get 8+ score for it

What is the Race of Sloths

Race of Sloths is a friendly competition where you can participate in challenges and compete with other open-source contributors within your normal workflow

For contributors:

  • Tag @race-of-sloths inside your pull requests
  • Wait for the maintainer to review and score your pull request
  • Check out your position in the Leaderboard
  • Keep weekly and monthly streaks to reach higher positions
  • Boast your contributions with a dynamic picture of your Profile

For maintainers:

  • Score pull requests that participate in the Race of Sloths and receive a reward
  • Engage contributors with fair scoring and fast responses so they keep their streaks
  • Promote the Race to the point where the Race starts promoting you
  • Grow the community of your contributors

Feel free to check our website for additional details!

Bot commands
  • For contributors
    • Include a PR: @race-of-sloths include to enter the Race with your PR
  • For maintainers:
    • Invite contributor @race-of-sloths invite to invite the contributor to participate in a race or include it, if it's already a runner.
    • Assign points: @race-of-sloths score [1/2/3/5/8/13] to award points based on your assessment.
    • Reject this PR: @race-of-sloths exclude to send this PR back to the drawing board.
    • Exclude repo: @race-of-sloths pause to stop bot activity in this repo until @race-of-sloths unpause command is called

@frol frol merged commit 471849b into near:main Jun 14, 2025
7 checks passed
@github-project-automation github-project-automation bot moved this from NEW❗ to Shipped 🚀 in DevTools Jun 14, 2025
@frol frol mentioned this pull request May 30, 2025
@vsavchyn-dev
Copy link
Contributor Author

@race-of-sloths

frol added a commit that referenced this pull request Jul 8, 2025
## 🤖 New release

* `near-cli-rs`: 0.20.0 -> 0.21.0 (⚠ API breaking changes)

### ⚠ `near-cli-rs` breaking changes

```text
--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant ContractActionsDiscriminants::DownloadAbi 4 -> 5 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:61
  variant ContractActionsDiscriminants::DownloadWasm 5 -> 6 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:64
  variant ContractActionsDiscriminants::ViewStorage 6 -> 7 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:67
  variant ContractActionsDiscriminants::DownloadAbi 4 -> 5 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:61
  variant ContractActionsDiscriminants::DownloadWasm 5 -> 6 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:64
  variant ContractActionsDiscriminants::ViewStorage 6 -> 7 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:67

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/enum_variant_added.ron

Failed in:
  variant SignWithDiscriminants:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant SignWithDiscriminants:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant CliContractActions:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:26
  variant CliSignWith:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:19
  variant SignWith:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant ContractActionsDiscriminants:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:58
  variant ContractActionsDiscriminants:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:58

--- failure trait_newly_sealed: pub trait became sealed ---

Description:
A publicly-visible trait became sealed, so downstream crates are no longer able to implement it
        ref: https://rust-lang.github.io/api-guidelines/future-proofing.html#sealed-traits-protect-against-downstream-implementations-c-sealed
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/trait_newly_sealed.ron

Failed in:
  trait near_cli_rs::common::JsonRpcClientExt in file /tmp/.tmpHq8aq0/near-cli-rs/src/common.rs:2342
```

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

##
[0.21.0](v0.20.0...v0.21.0)
- 2025-07-08

### Added

- Improved support for importing implicit accounts
([#498](#498))
- Added a command to confirm locally that the deployed contract matches
the source code it was built from
([#480](#480))
- Add support for submitting general DAO proposals
([#492](#492))

### Fixed

- Fixed typos in the default CLI config
([#501](#501))
- Fixed error RpcError: [missing field disable_9393_fix]
([#502](#502))
- use re-rexported version of `indicatif` module, needed for
`tracing-indicatif`
([#503](#503))
- `clippy::result_large_err` warning
([#488](#488))

### Other

- Added `verify_contract`/`inspect_contract` feauture gates
([#504](#504))
- Pinned binary releases to use ubuntu-22.04
([#506](#506))
- Fixed linting errors - non-inlined formatting syntax
([#499](#499))
- fix some typos ([#494](#494))
- simplified action struct
([#493](#493))
- added more RPCs (FAST NEAR and Lava) to the default config generation
([#491](#491))
- introduced `BoxedJsonRpcResult` type
([#490](#490))
- fixed shell configuration for command history
([#487](#487))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
eth-wardenrt added a commit to eth-wardenrt/near-cli-rs that referenced this pull request Sep 28, 2025
## 🤖 New release

* `near-cli-rs`: 0.20.0 -> 0.21.0 (⚠ API breaking changes)

### ⚠ `near-cli-rs` breaking changes

```text
--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant ContractActionsDiscriminants::DownloadAbi 4 -> 5 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:61
  variant ContractActionsDiscriminants::DownloadWasm 5 -> 6 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:64
  variant ContractActionsDiscriminants::ViewStorage 6 -> 7 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:67
  variant ContractActionsDiscriminants::DownloadAbi 4 -> 5 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:61
  variant ContractActionsDiscriminants::DownloadWasm 5 -> 6 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:64
  variant ContractActionsDiscriminants::ViewStorage 6 -> 7 in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:67

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/enum_variant_added.ron

Failed in:
  variant SignWithDiscriminants:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant SignWithDiscriminants:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant CliContractActions:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:26
  variant CliSignWith:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:19
  variant SignWith:SubmitAsDaoProposal in /tmp/.tmpHq8aq0/near-cli-rs/src/transaction_signature_options/mod.rs:64
  variant ContractActionsDiscriminants:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:58
  variant ContractActionsDiscriminants:Verify in /tmp/.tmpHq8aq0/near-cli-rs/src/commands/contract/mod.rs:58

--- failure trait_newly_sealed: pub trait became sealed ---

Description:
A publicly-visible trait became sealed, so downstream crates are no longer able to implement it
        ref: https://rust-lang.github.io/api-guidelines/future-proofing.html#sealed-traits-protect-against-downstream-implementations-c-sealed
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.41.0/src/lints/trait_newly_sealed.ron

Failed in:
  trait near_cli_rs::common::JsonRpcClientExt in file /tmp/.tmpHq8aq0/near-cli-rs/src/common.rs:2342
```

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

##
[0.21.0](near/near-cli-rs@v0.20.0...v0.21.0)
- 2025-07-08

### Added

- Improved support for importing implicit accounts
([#498](near/near-cli-rs#498))
- Added a command to confirm locally that the deployed contract matches
the source code it was built from
([#480](near/near-cli-rs#480))
- Add support for submitting general DAO proposals
([#492](near/near-cli-rs#492))

### Fixed

- Fixed typos in the default CLI config
([#501](near/near-cli-rs#501))
- Fixed error RpcError: [missing field disable_9393_fix]
([#502](near/near-cli-rs#502))
- use re-rexported version of `indicatif` module, needed for
`tracing-indicatif`
([#503](near/near-cli-rs#503))
- `clippy::result_large_err` warning
([#488](near/near-cli-rs#488))

### Other

- Added `verify_contract`/`inspect_contract` feauture gates
([#504](near/near-cli-rs#504))
- Pinned binary releases to use ubuntu-22.04
([#506](near/near-cli-rs#506))
- Fixed linting errors - non-inlined formatting syntax
([#499](near/near-cli-rs#499))
- fix some typos ([#494](near/near-cli-rs#494))
- simplified action struct
([#493](near/near-cli-rs#493))
- added more RPCs (FAST NEAR and Lava) to the default config generation
([#491](near/near-cli-rs#491))
- introduced `BoxedJsonRpcResult` type
([#490](near/near-cli-rs#490))
- fixed shell configuration for command history
([#487](near/near-cli-rs#487))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/release-plz/release-plz/).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Shipped 🚀

Development

Successfully merging this pull request may close these issues.

feat: Add support for submitting DAO proposals

4 participants