profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/rheaplex/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Rhea Myers rheaplex @dapperlabs Vancouver, Canada http://rhea.art/ Coding since the 80s, profesionally since the 90s, on the blockchain since 2014.

onflow/flip-fest 41

A backlog of all the available tasks to complete for Flow's FLIP Fest.

portto/blt-contracts 10

Blocto Token Smart Contracts

dapperlabs/kitty-items-web 7

The user interface for the kitty-items exemplar

BerkeleyBlockchain/dapper-labs-consulting 5

Peacock Exchange: A Decentralized Exchange (DEX) built using Dapper Labs' Cadence smart contract programming language.

rheaplex/art-social-graph 5

Screen scraping and processing relationships between art and artists from public data sources.

rheaplex/artworld-ethereum 3

Art for Ethereum, and vice versa.

rheaplex/aesthetic-data 2

Data visualisation of vision turned to data.

rheaplex/art_and_mathematics 2

Art-Mathematics

rheaplex/art_generators 2

Moved to http://github.com/robmyers/frame

Pull request review commentonflow/cadence

Add Path.toString() with tests and documentation.

 func TestInterpretDictionaryKeyTypes(t *testing.T) { 	} } +func TestPathToString(t *testing.T) {

Certainly! Added. This is the first test I've added for the check so let me know if/how to improve it. 🙂

rheaplex

comment created time in 18 hours

PullRequestReviewEvent

push eventonflow/cadence

Rhea Myers

commit sha 88fa06f733d48e200ba7c84dd51232e85c2fd59c

Add checker test for Path.toString() to runtime/tests/checker/path_test.go .

view details

push time in 18 hours

push eventonflow/cadence

Rhea Myers

commit sha 1a631f4fb1d2403e2fd8bdbf9bf1b76866caed9e

Update runtime/tests/interpreter/interpreter_test.go Use correct function name for TestInterpretPathToString. Co-authored-by: Bastian Müller <bastian@axiomzen.co>

view details

push time in 19 hours

Pull request review commentonflow/cadence

Add Path.toString() with tests and documentation.

 and [`Equatable`](../interfaces#equatable-interface) [interfaces](../interfaces)  Most of the built-in types, like booleans and integers, are hashable and equatable, so can be used as keys in dictionaries.++## Paths++Paths represent locations in account storage that objects can be stored and accessed at.++They consist of a domain (`storage`, `private`, or `public`) and an identifier separated by forward slashes. e.g. `/storage/MyProjectCollectionResource` .++### Path functions++- `cadence•fun toString(): String`++  Returns the string representation of the path.++  ```cadence+  let storagePath = /storage/path++  storagePath.toString()  // is "/storage/path"+  ```

Done, thank you!

rheaplex

comment created time in 19 hours

PullRequestReviewEvent

push eventonflow/cadence

Rhea Myers

commit sha 20231d93ed48e55d8812d64734fdb96e139954a9

Update docs/language/values-and-types.mdx Remove repeated Paths documentation Co-authored-by: Bastian Müller <bastian@axiomzen.co>

view details

push time in 19 hours

push eventonflow/cadence

Rhea Myers

commit sha d9ca7cc67271be4fe20ed65f4894ed52b45cdfd5

Move path function documentation to correct file.

view details

push time in 19 hours

push eventonflow/cadence

Rhea Myers

commit sha f49c90d72c2fc2f4491b5b5d14acc394daa6016a

Update CHANGELOG.md Remove hand-crafted content that will be generated automatically from the pull request. Co-authored-by: Bastian Müller <bastian@axiomzen.co>

view details

push time in 19 hours

issue commentjanezpodhostnik/flow-py-sdk

Relaxing Python3.9 Requirement

It looks like the code needs at least 3.8 due to use of typing.Annotated .

AndriyMulyar

comment created time in 20 hours

issue commentonflow/flip-fest

New Standard: Decentralized identifiers (DIDs) on Flow

I know the details of Flow and Ceramic. I'm interested in this

Awesome! Have you taken a look at https://www.hackerearth.com/challenges/hackathon/flip-fest/custom-tab/getting-started/#Getting%20Started ?

Do you have any questions about the (t)ask? 🙂

psiemens

comment created time in 2 days

pull request commentonflow/cadence

Add Path.toString() with tests and documentation.

I'm not sure the test is in the best place, I can move it as needed.

I've added an entry to the changelog which I can update or remove if needed.

rheaplex

comment created time in 6 days

PR opened onflow/cadence

Add Path.toString() with tests and documentation. Feature enhancement

Description

This PR adds a toString() function to Cadence Path types, and a golang test for that functionality.


<!-- Complete: -->

  • [x] Targeted PR against master branch
  • [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work
  • [x] Code follows the standards mentioned here
  • [x] Updated relevant documentation
  • [x] Re-reviewed Files changed in the Github PR explorer
  • [x] Added appropriate labels
+76 -2

0 comment

5 changed files

pr created time in 6 days

Pull request review commentonflow/flip-fest

New Standard: NFT metadata - Milestone 1

+/*+	This project is addressing problem "New Standard: NFT metadata #16"+	The below code is untested and is meant as an illustration of the concept.+	+	+	MetaDataUtil is added as a new default contract.+	+	Metadata is instantiated in the form of structs at the time the NFT is minted.+	Metadata is organized by string tags, and each metadata element may have multiple tags allowing NFTs to conform to multiple tag schemas.+	Metadata elements cannot be added after the NFT is minted, but Mutable elements can allow data to be modifiable.+	+	MetaDataElements are wrappers around two possible types of structs, one of which is immutable and the other of which is Mutable.+	Immutable elements can use default types or be defined in custom structs that implement ITaggedMetaData and IImmutableMetaData. +		Defining a custom class allows the data elements to be immutable while allowing a developer to upgrade the contract that defines the struct to alter the tags.+	Mutable elements store Capability pointers to IMetaDataProvider instances that can be stored anywhere.+		Mutable elements can be used for metadata that can be modified, such as for leveling up a character.+		Mutable elements can also be used for metadata that is shared between multiple NFTs, to minimize redundant data storage.+			A Side-effect (benefit?) here is that if the instance is stored in a contract in the developers account, the developer will need to cover the metaData storage costs instead of the NFT holder.+			PNG_RemoteDefaultImage is a default implementation that can be used to give an NFT a shared and/or updatable image.+				RemotePNGProvider is an example of an implementation of IMetaDataProvider that allows multiple NFTs to share the same image via Capability reference.+*/++pub contract MetaDataUtil {+    pub struct interface ITaggedMetaData {+        pub fun getTags() : [String]+    }++    pub struct interface IMetaDataProvider {+        pub fun getData() : AnyStruct+        pub fun getDataType() : String+    }++    pub struct interface IImmutableMetaData {+        pub let data: AnyStruct+        pub let type: String+    }++    pub struct interface IMutableMetaData {+        pub let dataProvider: Capability<&AnyStruct{IMetaDataProvider}>+    }++    pub struct MetaData {+        pub let elements : [MetaDataElement]

Note that the content of this array can be manipulated by the owner of the MetaData struct, and functions called on value types within it (and on types in arrays/dictionaries within those, and so on recursively...).

I usually recommend using access(self) for the metadata stored in an object, and returning (an implicitly lazy copy of) it with apub` accessor.

i.e.:

access(self) let elements: [MetaDataElement]

pub fun getElements(): [MetaDataElement] {
  return self.elements
}

This applies to all the types below that expose a dictionary or array as a pub member variable.

figs999

comment created time in 6 days

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentonflow/flip-fest

New Standard: NFT metadata - Milestone 1

+/*+	This project is addressing problem "New Standard: NFT metadata #16"+	The below code is untested and is meant as an illustration of the concept.+	+	+	MetaDataUtil is added as a new default contract.+	+	Metadata is instantiated in the form of structs at the time the NFT is minted.+	Metadata is organized by string tags, and each metadata element may have multiple tags allowing NFTs to conform to multiple tag schemas.+	Metadata elements cannot be added after the NFT is minted, but Mutable elements can allow data to be modifiable.+	+	MetaDataElements are wrappers around two possible types of structs, one of which is immutable and the other of which is Mutable.+	Immutable elements can use default types or be defined in custom structs that implement ITaggedMetaData and IImmutableMetaData. +		Defining a custom class allows the data elements to be immutable while allowing a developer to upgrade the contract that defines the struct to alter the tags.+	Mutable elements store Capability pointers to IMetaDataProvider instances that can be stored anywhere.+		Mutable elements can be used for metadata that can be modified, such as for leveling up a character.+		Mutable elements can also be used for metadata that is shared between multiple NFTs, to minimize redundant data storage.+			A Side-effect (benefit?) here is that if the instance is stored in a contract in the developers account, the developer will need to cover the metaData storage costs instead of the NFT holder.+			PNG_RemoteDefaultImage is a default implementation that can be used to give an NFT a shared and/or updatable image.+				RemotePNGProvider is an example of an implementation of IMetaDataProvider that allows multiple NFTs to share the same image via Capability reference.+*/++pub contract MetaDataUtil {

In the Cadence code that Dapper has written, we tend to use descriptive names that provide context and/or indicate intent, rather than well-known prefixes/suffixes. We describe the scope, constraint, or affordance provided by Capability interfaces, e.g. CollectionPublic, Provider, Receiver. And for concrete types we tend to emphasize what they are or what they do, e.g. NonFungibleToken, FlowEpoch, NodeDelegator.

None if this is a criticism of other approaches to naming, or to the specific naming used here - which is very clear, regular, and logical, all of which is of advantage when reading a codebase. I would however imagine that we will be looking for naming that reads similarly to the existing standard and core contracts, and this may be worth considering.

figs999

comment created time in 6 days

create barnchonflow/cadence

branch : rheaplex/path-as-string

created branch time in 8 days

issue commentonflow/flip-fest

CryptoDappy Feature: NFT marketplace

Heya all.

I'm Rhea ( @rheaplex ), a senior smart contract engineer at Dapper Labs and one of the authors of the nft-storefront Cadence smart contract code. I'm available to answer any questions you may have about that code and how to interface with it, on-chain and off.

😺

srinjoyc

comment created time in 8 days

startedonflow/flip-fest

started time in 8 days

issue commentonflow/flip-fest

New Standard: NFT metadata

Heya everyone!

I'm Rhea, one of the engineers from the core Flow team working on Cadence and its uses. As you can see from the Assignees list I'm a point of contact for all of you on this issue. I write Cadence code and perform code reviews for internal and external projects, so if you have any Cadence questions I should be able to help! In a previous life I did metadata standards work, so I'm looking forward to seeing what comes from this initiative.

😺

psiemens

comment created time in 8 days

push eventrheaplex/draw-something

Rhea Myers

commit sha 3f5ef49c5642a3a6636589da688ca13c34d2f630

Add ganache-cli configuration options and notes.

view details

push time in 9 days

issue openedonflow/cadence

HashAlgorithm is Unsupported

The Flow docs mention a HashAlgorithm enum:

https://docs.onflow.org/cadence/language/crypto/#hashing

Cadence doesn't seem to support it -

https://play.onflow.org/82d4070f-5a23-483f-90cd-a35dc8043be0?type=account&id=7555342d-2551-41ea-9bf9-d88218031fe8

We need it (or a workaround) for on-chain hash validation for a high priority project. 😬

created time in 10 days

push eventrheaplex/draw-something

Rhea Myers

commit sha 54878b8551da096853f471ec45277fbe568fca27

More build system for tx edition images and metadata,

view details

push time in 11 days

push eventrheaplex/draw-something

Rhea Myers

commit sha c369745505b95048efaf07bc67dd072843d5ad48

Deploying ERC721 contracct, minting tokens, and using their hashes as drawing skeletons now works.

view details

push time in 11 days

create barnchrheaplex/draw-something

branch : draw-something-txes

created branch time in 11 days

issue commentonflow/flow-nft

IMPROVEMENT: NFT Metadata

So create a type from its Identifier is what I am looking for.

If we wish to fetch the instance of that type to work with it, we probably know its structure and can import its definition to access it better.

If we don't, maybe we should access it via an interface.

In either case, if we need to get a Type from a String we can construct a lookup table in a well-known location of {String: Type} and use that if we need to.

I'm worried that type construction from strings promises a dynamicness that Cadence doesn't have. But I've been wrong about this kind of thing before. 😺

joshuahannan

comment created time in 13 days

issue commentonflow/flow-nft

Add way to create an empty NFT collection without needing to create a new contract.

Here's a quick sketch of a singular Collection for any possible future standard -

https://play.onflow.org/3f4a5549-e7ce-4d9c-bd71-81ab47c05a51?type=account&id=63f1f98c-5849-4780-9987-db60a992644f

cybercent

comment created time in 16 days

pull request commentonflow/flow-ft

Removes pre-condition for mint, adds conditionals for events

I feel like owner=nil should not happen, if we can prevent. ( I don't remember exactly, but if I get vault from storage I think owner sets to nil, doesn't feel correct to me )

The problem is that once a Vault is removed from storage in a transaction, we do not know which account it is associated with. Even without resources from multiple AuthAccounts in a single transaction, a Vault's association with the storage of the AuthAccount that it has just been removed from may not be strong enough to warrant identifying it as the Vault's owner. If we regard the owner as the storage that the Vault is in, this becomes tautological.

It may be the case that borrowed Vaults and other resources should act differently. But resources that have been removed from storage and retain an owner address may be conceptually equivalent to dangling pointers in ways we would need to think through.

joshuahannan

comment created time in 16 days

pull request commentonflow/flow-ft

Removes pre-condition for mint, adds conditionals for events

This is a tricky one.

If these changes were implemented it's a shame we can't change the Address? in these events to Address, as that would be a nice way both of signalling that the Address will always be set and of (trivially) reducing the off-chain code required to process the events.

Removing the > 0 precondition from deposit() does mean that we can now get zero value deposits, and combining those with deposits to (temporary or newly created) Vaults that do not have a set address means we will obviously get events that contain (0, nil) as their data. Which doesn't seem very informative. But there are edge cases where it may be, and where the advantages of (a petty 😉) consistency win out for offchain observers over saving gas.

We won't always get a deposit following a withdrawal, however, as apart from anything else a Vault can always be saved to storage directly. So we would be reducing the number of cases in which events are emitted further rather than deviating from perfect consistency in withdraw/deposit pairs.

It may be the case that we should redesign the FT events to only emit some sort of exchange event where we have two addresses and a transfer between them, enforced in some way via an updated FT API. This would mean that offchain watchers are guaranteed to see only balanced withdrawal/deposits and can reason about them more simply. But it would lead to even fewer informative events, so maybe not. 😺

A good person to comment on this would be @orodio .

joshuahannan

comment created time in 20 days