Sprint #17 - 2019-08-16

Sprint metrics

  • Story Points: 72

  • Story Points for Code Freeze: 8

  • Story Points for Technical Go-live: 372

User stories

RLAU-258 - Javascript Library API Documentation

Story
Criteria

Publish API documentation for the Javascript library.

  • Component: docs

  • Contributor: Damian

Acceptance criteria:

Given that the radixdlt-js library source code has proper JSdoc documentation When the developer generates the docs using an automated script Then a set of TSdocs HTML files are generated

Given that a set of JSdocs HTML files are available When the developer commits those files to the library-api-docs GitHub doc repository Then the documentation articles are updated and published on GitHub pages

Given that a set of documents have been published on GitHub pages When a user visits https://radixdlt.github.io/library-api-docs/radixdlt-js/[version] Then the TSdoc API documents are visible and available for reference.

Given that a set of documents have been published on GitHub pages When a user visits https://radixdlt.github.io/library-api-docs/ Then an index of APIs documents (by library/version) is visible and available for reference.

RLAU-892 - (Android) Asset details

Story
Criteria

Add asset details (name, description, image and transaction log) to the Android wallet.

  • Component: android-wallet

  • Contributor: Marc

Given that I am on the asset transactions screen When I drag down the toolbar, Then I see extra information about the asset

Given that I navigate to the the asset transactions screen When this is displayed, Then the toolbar should be in a collapsed state (closed)

Given that I am on the asset transactions screen and the toolbar is in an expanded state When I scroll or drag the toolbar to close it, Then this should collapse and hide the extra info

RLAU-1334 - Add MintTokens to Application Layer

Story
Criteria

Adds the `Mint Token` feature to the Swift library API layer.

  • Component: radixdlt-swift

  • Contributor: Alex

Scenario 1: Mint Tokens happy path

Given Radix identity Alice and an application layer action MintToken and a previously created FooToken, for which Alice has the appropriate permissions When Alice call Mint(42) for FooToken Then the minting succeeds and the supply of FooToken is updated with 42 and that these new 42 tokens belong to Alice

Scenario 2: Mint Tokens fails for nonexisting RRI

Given Radix identity Alice and an application layer action MintToken

When Alice call Mint on RRI for some nonexisting FoobarToken

Then an error unknownToken is thrown

Scenario 3: Mint Tokens exceeding the greatest possible supply

Given Radix identity Alice and an application layer action MintTokenand a previously created FooToken which has a supply of max - 10 tokens, for which Alice has the appropriate permissions.

When Alice call Mint(20) on FooToken

Then an error tokenOverMint is thrown

Scenario 4: Mint Tokens wrong permissions

Given Radix identity Alice and an application layer action MintToken and a previously created FooToken, for which Alice does NOT have the appropriate permissions When Alice call Mint(42) for FooToken Then an error lackingTokenPermissionsis thrown

Scenario 5: Mint Tokens with Fixed Supply

Given Radix identity Alice and an application layer action MintToken and a previously created FooToken, which has FIXED supply When Alice call Mint for FooToken Then an error tokenHasFixedSupplyCannotMintis thrown

Scenario 6: Mint Tokens with an amount that is not a multiple of the granularity

Given Radix identity Alice and an application layer action MintToken and a previously created FooToken, with a granularity of 3 When Alice call Mint(2) for FooToken Then an error amountNotMultipleOfGranularity thrown

RLAU-1338 - Add PutUniqueIdAction to Application Layer

Story
Criteria

Adds the `AddUniqueIdToAtom` feature to the Swift library API layer.

  • Component: radixdlt-swift

  • Contributor: Alex

Scenario 1: Send a Transaction with a single UniqueId

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction containing a UniqueId with the string "foobar" Then the Transaction is successfully sent and we can read out the UniqueId string "foobar"

Scenario 2: Send a Transaction with a multiple UniqueId’s

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction containing two UniqueId with the string "foo" and "bar” respectively Then the Transaction is successfully sent and we can read out the UniqueId strings "foo" and "bar”.

Scenario 3: Send a Transaction containing duplicate UniqueId’s

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction containing two UniqueId with the same id Then an error uniqueIdAlreadyUsed thrown

Scenario 4: Send a Transaction containing an already used UniqueId

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction with a UniqueId already used in a previous Transaction Then an error uniqueIdAlreadyUsed thrown

Scenario 5: Send a Transaction containing a UniqueId with the same RRI as MutableSupplyTokenDefintion

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction with a UniqueId which RRI is the same as previous MutableSupplyTokenDefinition Then an error rriAlreadyUsedByMutableSupplyToken thrown

Scenario 6: Send a Transaction containing a UniqueId with the same RRI as FixedSupplyTokenDefintion

Given identity Alice and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction with a UniqueId which RRI is the same as previous FixedSupplyTokenDefinition Then an error rriAlreadyUsedByFixedSupplyToken thrown

Scenario 7: Send a Transaction with a UniqueId which address belongs to someone else

Given identities Alice and a Bob and a RadixApplicationClient connected to some Radix node When Alice sends a Transaction containing a UniqueId specifying Bob’s address Then an error nonMatchingAddress thrown

RLAU-1339 - Add BurnTokensaction to Application Layer

Story
Criteria

Adds the `Burn Token` feature to the Swift library API layer.

  • Component: radixdlt-swift

  • Contributor: Alex

Scenario 1: Burn Tokens happy path

Given Radix identity Alice and an application layer action BurnToken and a previously created FooToken, for which Alice has the appropriate permissions When Alice call Burn(25) for FooToken Then the burning succeeds and the supply of FooToken is decreased by 25.

Scenario 2: Burn Tokens fails for nonexisting RRI

Given Radix identity Alice and an application layer action BurnToken When Alice call Burn on RRI for some nonexisting FoobarToken Then an error unknownToken is thrown

Scenario 3: Burn Tokens exceeding the current balance

Given Radix identity Alice and an application layer action BurnToken a previously created FooToken which Alice has 10 tokens of, and for which she has the appropriate permissions. When Alice call Burn(20) on FooToken Then an error lackingFunds is thrown

Scenario 4: Burn Tokens wrong permissions

Given Radix identity Alice and an application layer action BurnToken and a previously created FooToken, for which Alice does NOT have the appropriate permissions When Alice call Burn for FooToken Then an error lackingTokenPermissionsis thrown

Scenario 5: Burn Tokens with Fixed Supply

Given Radix identity Alice and an application layer action BurnToken and a previously created FooToken, which has FIXED supply When Alice call Burn for FooToken Then an error tokenHasFixedSupplyCannotBurnis thrown

Scenario 6: Burn Tokens with an amount that is not a multiple of the granularity

Given Radix identity Alice and an application layer action BurnToken and a previously created FooToken, with a granularity of 3 When Alice call Burn(2) for FooToken Then an error amountNotMultipleOfGranularity thrown

RLAU-1506 - (Android) Implement initial tutorial layout screen when opening app for the first time

Story
Criteria

Adds an initial tutorial screen to the Android wallet.

  • Component: android-wallet

  • Contributor: Marc

Given that I open the wallet for the first time, When I have successfully created a wallet, Then I am navigated to the assets screen where a one time instructional overlay is displayed hinting me what to do next

Given that hint overlay is displayed, When I click the x (close) button on top left corner, Then the overlay is dismissed

Given that hint overlay is displayed, When I click the receive button, Then overlay is dismissed and I am navigated to the receive screen

Given that hint overlay has already been displayed, When user deletes his wallet and creates a new one, Then overlay will not be displayed

RLAU-1513 - (swift) Transaction containing executed UserAction

Story
Criteria

Adds support to observe Transactions at a certain Address to the Swift library.

  • Component: radixdlt-swift

  • Contributor: Alex

Scenario 1: Transaction with a single CreateTokenAction without initial supply

Given identity Alice and a RadixApplicationClient When Alice makes a transaction containing a single CreateTokenActionwithout initial supply and observes her transactions Then she sees a Transaction containing CreateTokenAction

Scenario 2: Transaction with a single CreateTokenAction with initial supply

Given identity Alice and a RadixApplicationClient When Alice makes a transaction containing a single CreateTokenActionwith an initial supply and observes her transactions Then she sees a Transaction containing CreateTokenAction and a MintTokenAction

Scenario 3: Transaction with a singleTransferTokensAction

Given identity Alice and a RadixApplicationClient and a FooTokencreated by Alice When Alice makes a transaction containing a single TransferTokensActionof FooTokenand observes her transactions Then she sees a Transaction containing the TransferTokensAction

Scenario 4: Transaction with a singleBurnTokensAction

Given identity Alice and a RadixApplicationClient and a FooToken created by Alice When Alice makes a transaction containing a single BurnTokensActionof FooTokenand observes her transactions Then she sees a Transaction containing just the BurnTokensAction

(A BurnTokensActionmay be interpreted as a TransferTokensActoin if not done properly)

Scenario 5: Transaction with a singleMintTokensAction

Given identity Alice and a RadixApplicationClient and a FooTokencreated by Alice When Alice makes a transaction containing a single MintTokensActionof FooTokenand observes her transactions Then she sees a Transaction containing the MintTokensAction

Scenario 6: Transaction with a singleSendMessageAction

Given identity Alice and a RadixApplicationClient When Alice makes a transaction containing a single SendMessageAction and observes her transactions Then she sees a Transaction containing the SendMessageAction

Scenario 7: Transaction with a singlePutUniqueAction

Given identity Alice and a RadixApplicationClient When Alice makes a transaction containing a single PutUniqueAction and observes her transactions Then she sees a Transaction containing the PutUniqueAction

Scenario 8: Transaction with two MintTokenActions and two PutUniqueActions

Given identity Alice and a RadixApplicationClient and a FooTokencreated by Alice When Alice makes a transaction containing 2 MintTokensActionof FooTokenand 2 PutUnique and observes her transactions Then she sees a Transaction containing the MintTokensActions and the PutUniqueActions

Scenario 9: Transaction with no actions

Given a AtomToTransactionMapper When an empty Atom is passed to the AtomToTransactionMapper Then a Transaction with no actions is returned.