Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add ContractClient for easy contract interaction #929

Merged
merged 6 commits into from
Mar 20, 2024

Commits on Jan 5, 2024

  1. Add generation of contract clients and an AssembledTransaction abst…

    …raction (stellar#891)
    
    * feat: spec.generateContractClient; AssembledTx
    
    - new e2e tests copied from cli `ts-tests` for the generated bindings, but
      with TypeScript removed because the ContractClient is generated here
      dynamically at run time, so we cannot know the types at compile time in
      the tests.
    - generate JSON specs from local .wasm files during initiaze.sh instead
      of generating TS bindings. As explained in the new wasms/specs/README,
      this is a bummer, but is temporary
    
    * chore: rollback test/contract_spec changes
    
    ContractClient is now fully tested in `tests/e2e` rather than in this
    file
    
    Keeping this in a separate commit in case we decide it's better to go
    back and do things "The tests/unit way" instead of the new tests/e2e
    way. It feels maybe silly to have both.
    chadoh committed Jan 5, 2024
    Configuration menu
    Copy the full SHA
    4069314 View commit details
    Browse the repository at this point in the history

Commits on Jan 24, 2024

  1. Update soroban-cli and sync with upstream master (stellar#911)

    * Update examples to use new module and package structure. (stellar#900)
    * Bump follow-redirects from 1.15.3 to 1.15.4 (stellar#906)
    * Export the individual event response instance (stellar#904)
    * Add support for new `sendTransaction` response field (stellar#905)
    * Update README to flow better (stellar#907)
    * Prepare v11.2.0 for release (stellar#908)
    
    ---------
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: George <Shaptic@users.noreply.github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    3 people committed Jan 24, 2024
    Configuration menu
    Copy the full SHA
    ca28486 View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2024

  1. Make simulation optional, simplify wallet/signer interface (stellar#921)

    * Update examples to use new module and package structure. (stellar#900)
    
    * Fixup deprecation to specify exact version
    * Upgrade references to use latest modules
    
    * Bump follow-redirects from 1.15.3 to 1.15.4 (stellar#906)
    
    Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
    - [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
    - [Commits](follow-redirects/follow-redirects@v1.15.3...v1.15.4)
    
    ---
    updated-dependencies:
    - dependency-name: follow-redirects
      dependency-type: indirect
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    
    * Export the individual event response instance (stellar#904)
    
    * Add support for new `sendTransaction` response field (stellar#905)
    
    * Add checks to ensure incorrect fields don't sneak in
    
    * Update README to flow better (stellar#907)
    
    * Prepare v11.2.0 for release (stellar#908)
    
    * Upgrade all dependencies besides chai
    * Add changelog entries
    
    * Eliminating `utility-types` dependency entirely (stellar#912)
    
    Eliminated the 'utility-types' package since its functionalities are likely
    replaced by native TypeScript features. This change includes cleaning up imports
    and references in the codebase and updating the package.json and yarn.lock
    accordingly, resulting in a leaner dependency graph and potentially reducing
    installation times and package size.
    
    Co-authored-by: Sérgio Luis <sergiocl@airtm.io>
    
    * Release v11.2.1 (stellar#913)
    
    * Upgrade dependencies and stellar-base
    
    * fix: stop using TimeoutInfinite
    
    * optional simulate & wallet, editable TransactionBuilder
    
    - Can now pass an `account` OR `wallet` when constructing the
      ContractClient, or none! If you pass none, you can still make view
      calls, since they don't need a signer. You will need to pass a
      `wallet` when calling things that need it, like `signAndSend`.
    
    - You can now pass `simulate: false` when first creating your
      transaction to skip simulation. You can then modify the transaction
      using the TransactionBuilder at `tx.raw` before manually calling
      `simulate`. Example:
    
          const tx = await myContract.myMethod(
            { args: 'for', my: 'method', ... },
            { simulate: false }
          );
          tx.raw.addMemo(Memo.text('Nice memo, friend!'))
          await tx.simulate();
    
    - Error types are now collected under `AssembledTransaction.Errors` and
      `SentTransaction.Errors`.
    
    * Ensure that event streaming tests write a valid stream (stellar#917)
    * Release v11.2.2 (stellar#918)
    * export ExampleNodeWallet from lib
    
    Tyler van der Hoeven thought this would be useful.
    
    The current place it's exported from is surpassingly silly. But it
    functions properly and the tests fail the same way they failed before.
    
    * Drop all usage of array-based passing (stellar#924)
    
    * feat(e2e-tests): new account & contract per test
    
    - New `clientFor` that instantiates a ContractClient for given
      contract, as well as initializes a new account, funding it with
      friendbot
    - Can also use `generateFundedKeypair` directly, as with test-swap
    - Stop generating anything in initialize.sh. Just check that the network
      is running and the pinned binary is installed, and fund the
      `$SOROBAN_ACCOUNT`.
    
      Ideally we wouldn't use the binary at all, but for now the tests are
      still shelling out to the CLI, so it's worth keeping the pinning
      around
    
    * wallet/signer only needs three methods
    
    * feat: no more `Wallet` interface
    
    Instead, just accept the things that Wallet contained.
    
    This avoids the conundrum of what to call the thing.
    
    - `Wallet` seems too high-level. Too high-level to be the concern of
      stellar-sdk, and too high-level for the thing being described here.
      It's really just two functions: `signTransaction` and `signAuthEntry`.
    - No need for this thing to defined `getPublicKey`, let alone any of the
      more complicated wrappers around it that it used to. Just have people
      pass in a `publicKey`. For convenience' sake, I also allowed this to
      be a Promise of a string, so that you don't need to instantiate
      ContractClient asynchronously, instead doing something like:
    
          new ContractClient({
            publicKey: asyncPublicKeyLookupFromWallet(),
            ...
          })
    
      This helps when getting public keys in a browser environment, where
      public key lookup is async, and adds little complexity to the logic
      here.
    
    * rm getAccount from exposed interface
    
    * make simulation public; wrap comments
    
    * explicit allowHttp
    
    * test(ava): set timeout to 2m
    
    * build: move ExampleNodeWallet to own entrypoint
    
    No need to pollute the global API or bundle size with this.
    
    * build: move ContractClient & AssembledTransaction
    
    These are a bit higher-level and experimental, at this point, so let's
    not clutter the global API or the bundle size unless people really want
    it.
    
    * fix: allow overriding 'publicKey' for 'signAuthEntries'
    
    * feat(contract-client): require publicKey
    
    * fix: use Networks from stellar-base
    
    * doc: explain 'errorTypes' param
    
    * build: ContractClient-related things in one dir
    
    * typo
    
    * move primitive type defs to contractclient
    
    * rm ContractClient.generate; do it in constructor
    
    * feat: separate rust_types to own import path
    
    * feat: don't make people import and use Networks enum
    
    I personally find TS enums a little surprising to work with, and my own
    codebases already have network passphrases littered throughout. I think
    we can upgrade to use the enum later, after more discussion about the
    exact interface. Let's not tangle that up in this change.
    
    * doc: include rust_types readme info in build
    
    the README.md file is not included in the `lib/rust_types` built
    version, so it's better to include it in a file that people can find by
    using the go-to-definition function in their editor, such as a
    `rust_types.ts` file directly, which gets built as
    `lib/rust_types.d.ts`.
    
    * build: make it easier to import rust_types
    
    * feat: basicNodeSigner as a plain-object factory
    
    Our suggested approach of spreading `signer` into `ContractClient`
    constructors causes typing issues, since `networkPassphrase` is a
    private field inside BasicNodeSigner. This means the `signer` needs to
    be spread in before the inclusion of `networkPassphrase`, otherwise it
    gets overwritten with `undefined` (or maybe TypeScript just thinks it
    will get overwritten).
    
    ---------
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: George <Shaptic@users.noreply.github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Sérgio Luis <sergiolclem@gmail.com>
    Co-authored-by: Sérgio Luis <sergiocl@airtm.io>
    5 people committed Mar 12, 2024
    Configuration menu
    Copy the full SHA
    bdf7495 View commit details
    Browse the repository at this point in the history

Commits on Mar 13, 2024

  1. fix(contract-client): stop jsifying method names

    This implementation needs to match what is done in the TS Bindings in
    Rust. Keeping "JSification" logic consistent in both is not worth the
    slight nicety of allowing people to type camelCaseMethodNames in JS.
    
    Additionally, having camelCaseMethodNames in one context when the real
    method name is probably_snake_case could lead to confusion. If someone
    types a camelCaseName in their CLI, the CLI will complain, and they
    might not know what's going on.
    chadoh committed Mar 13, 2024
    Configuration menu
    Copy the full SHA
    9b57279 View commit details
    Browse the repository at this point in the history

Commits on Mar 14, 2024

  1. Merge branch 'master' into feat/contract-client

    * master:
      Move TypeScript to devDependencies to reduce bundle size (stellar#926)
      Drop all usage of array-based passing (stellar#924)
      Release v11.2.2 (stellar#918)
      Ensure that event streaming tests write a valid stream (stellar#917)
      Release v11.2.1 (stellar#913)
      Eliminating `utility-types` dependency entirely (stellar#912)
      Prepare v11.2.0 for release (stellar#908)
      Update README to flow better (stellar#907)
      Add support for new `sendTransaction` response field (stellar#905)
      Export the individual event response instance (stellar#904)
      Bump follow-redirects from 1.15.3 to 1.15.4 (stellar#906)
      Update examples to use new module and package structure. (stellar#900)
    chadoh committed Mar 14, 2024
    Configuration menu
    Copy the full SHA
    c778a50 View commit details
    Browse the repository at this point in the history
  2. docs(contract-client): clean api, write a book

    Yes, a whole book about AssembledTransaction. It needed documentation;
    why not make it useful.
    
    This also removes an obsolute method, marks a couple as private,
    adds detail to other comments, fixes the `fee` type, updates
    SentTransaction docs, and organizes the code a bit.
    chadoh committed Mar 14, 2024
    Configuration menu
    Copy the full SHA
    ba458c6 View commit details
    Browse the repository at this point in the history