Skip to content
Avatar
💭
I may be slow to respond on GitHub.
💭
I may be slow to respond on GitHub.
  • Dapper Labs
  • Austin, TX
  • 22:56 (UTC -05:00)

Organizations

@dapperlabs @onflow
Block or Report

Block or report fxamacker

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Add an optional note:
Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
fxamacker/README.md

On GitHub, I maintain or contribute to projects such as fxamacker/cbor, fxamacker/circlehash, onflow/atree, onflow/ccf, onflow/cadence, onflow/flow-go, etc.

My first open source project is fxamacker/cbor. fxamacker/cbor is used in projects by Arm Ltd., Cisco, Dapper Labs, EdgeX�?Foundry, Fraunhofer‑AISEC, Linux�?Foundation, Microsoft, Mozilla, Tailscale, Teleport, and�?others.

fxamacker/cbor passed multiple confidential security assessments in 2022. A nonconfidential security assessment (prepared by NCC�?Group for Microsoft�?Corporation) includes a subset of fxamacker/cbor v2.4.0 without finding any vulnerabilities.

Most of the code I wrote is closed source (in many languages but mostly multithreaded C++). I'm currently enjoying open source projects and the amazing simplicity of Go.

Some of my open source work is described here.

Design & Implementation

image

onflow/atree: Atree provides scalable arrays and maps. It is used by Cadence in the Flow Blockchain.

Atree segments, encodes, and stores data into chunks of relatively small size. This enables blockchains to only hash and transmit modified chunks (aka payloads) instead of the entire array, map, or large element.

Among other aspects, I designed and implemented a novel hash collision handling method. It is different from published methods such as Cuckoo Hashing, Double Hashing, 2-Choice Hashing, etc.

This new hash collision handling method balances speed, security, storage size, etc. It uses a fast noncryptographic 64-bit hash and if there is a hash collision, it uses deferred and segmented 256-bit cryptographic digest (in 64-bit segments). By default, it uses CircleHash64f and BLAKE3.

Acknowledgements: Atree wouldn't exist without Dieter Shirley making priorities clear and inspiring us, Ramtin M. Seraj leading the R&D and empowering us to innovate, and Bastian Müller improving Atree while leading the integration into Cadence. Many thanks to Supun Setunga for the very complex data migration work and more!

Optimizations

When feasible, my optimizations improve speed, memory, storage, and network use without negative tradeoffs.

onflow/flow-go: Found optimizations by reading unfamiliar source code and proposed them to resolve issue #1750. Very grateful for Ramtin M. Seraj for opening a batch of issues and letting me tackle this one.

PR #1944 (Optimize MTrie Checkpoint for speed, memory, and file size):

  • SPEED: 171x speedup (11.4 hours to 4 minutes) in MTrie traversing/flattening/writing phase (without adding concurrency) which led to a 47x speedup in checkpointing (11.7 hours to 15 mins).
  • MEMORY: -431 GB alloc/op (-54.35%) and -7.6 billion allocs/op (-63.67%)
  • STORAGE: -6.9 GB file size (without using compression yet)

After PR #1944 reduced Mtrie flattening and serialization phase to under 5 minutes (which sometimes took 17 hours on mainnet16), creating a separate MTrie state used most of the remaining duration and memory.

Additional optimizations (add concurrency, add compression, etc.) were moved to separate issue/PR and I switched my focus to related issues like #1747.

UPDATE: About six months later, file size grew from 53GB to 126GB and checkpointing frequency increased to every few hours (instead of about once daily) due to increased transactions and data size. Without PR #1944, checkpointing would be taking over 20-30 hours each time, require more operational RAM, and slowdown the system with increased gc pressure. More info: issue #2286 and PR #2792.

Evaluations and Improvements

fxamacker/circlehash: I created CircleHash64 on weekends after evaluating state-of-the-art fast hashes for work. At the time, I needed a fast hash for short input sizes typically <128 bytes but didn't like existing hashes. I didn't want to reinvent the wheel so I based it on Google Abseil C++ internal hash. CircleHash64 is well-rounded: it balances speed, digest quality, and maintainability.

CircleHash64 has good results in Strict Avalanche Criterion (SAC).

CircleHash64 Abseil C++ SipHash-2-4 xxh64
SAC worst-bit
0-128 byte inputs
(lower % is better)
0.791% 🥇
w/ 99 bytes
0.862%
w/ 67 bytes
0.802%
w/ 75 & 117 bytes
0.817%
w/ 84 bytes

☝️ Using demerphq/smhasher updated to test all input sizes 0-128 bytes (SAC test will take hours longer to run).

CircleHash64 is fast at hashing short inputs with a 64-bit seed

CircleHash64
(seeded)
XXH3
(seeded)
XXH64
(w/o seed)
SipHash
(seeded)
4 bytes 1.34 GB/s 1.21 GB/s 0.877 GB/s 0.361 GB/s
8 bytes 2.70 GB/s 2.41 GB/s 1.68 GB/s 0.642 GB/s
16 bytes 5.48 GB/s 5.21 GB/s 2.94 GB/s 1.03 GB/s
32 bytes 8.01 GB/s 7.08 GB/s 3.33 GB/s 1.46 GB/s
64 bytes 10.3 GB/s 9.33 GB/s 5.47 GB/s 1.83 GB/s
128 bytes 12.8 GB/s 11.6 GB/s 8.22 GB/s 2.09 GB/s
192 bytes 14.2 GB/s 9.86 GB/s 9.71 GB/s 2.17 GB/s
256 bytes 15.0 GB/s 8.19 GB/s 10.2 GB/s 2.22 GB/s
  • Using Go 1.17.7, darwin_amd64, i7-1068NG7 CPU
  • Results from go test -bench=. -count=20 and benchstat
  • Fastest XXH64 in Go+Assembly doesn't support seed

CircleHash64 doesn't have big GB/s drops in throughput as input size gets larger. Other CircleHash variants are faster for larger input sizes and a bit slower for short inputs (not yet published).

Implement IETF Internet Standards (RFC 8949 & RFC 7049)

fxamacker/cbor: I designed and implemented a secure CBOR codec after reading RFC 7049. During implementation, I helped review the draft leading to RFC 8949. The CBOR codec rejects malformed CBOR data and has an option to detect duplicate map keys. It doesn't crash when decoding bad CBOR data.

Decoding 9 or 10 bytes of malformed CBOR data shouldn't exhaust memory. For example,
[]byte{0x9B, 0x00, 0x00, 0x42, 0xFA, 0x42, 0xFA, 0x42, 0xFA, 0x42}

Decode bad 10 bytes to interface{} Decode bad 10 bytes to []byte
fxamacker/cbor
1.0-2.3
49.44 ns/op, 24 B/op, 2 allocs/op* 51.93 ns/op, 32 B/op, 2 allocs/op*
ugorji/go 1.2.6 �?️ 45021 ns/op, 262852 B/op, 7 allocs/op 💥 runtime: out of memory: cannot allocate
ugorji/go 1.1-1.1.7 💥 runtime: out of memory: cannot allocate 💥 runtime: out of memory: cannot allocate

*Speed and memory are for latest codec version listed in the row (compiled with Go 1.17.5).

fxamacker/cbor CBOR safety settings include: MaxNestedLevels, MaxArrayElements, MaxMapPairs, and IndefLength.

Professional Background

I try to balance competing factors such as speed, security, usability, and maintainability based on each project's priorities.

Most recently, I accepted an offer I received on April 13, 2021 from Dapper Labs. I had been working for them as an independent contractor for about two weeks to help optimize Cadence storage layer and to create a streaming mode branch of fxamacker/cbor. On my first day as a contractor, I created issue 738 and the Cadence team was very welcoming and productive to work with. I subsequently opened 100+ issues and 100+ PRs at work in 2021.

My prior experience before Dapper Labs includes co-founding & bootstrapping enterprise software company, and working as an IT consultant.

  • My smallest consulting client - a startup. I assisted with prototyping which helped secure their next round of funding.
  • My largest consulting client - an S&P 500 company with almost 50,000 employees. I evaluated (as part of a large team) various technologies to be selected for their new global stack for deployment to over 100 countries.
  • My largest software licensing+subscription+support client - a company with over 3,000 employees in the US that deployed my data security system to all their US-based offices and factories. The tamper-resistant system used 4 types of servers to distribute and enforce security policies across multiple timezones for various client software. The system was designed to repair and update itself with bugfixes without introducing downtime. I was only one of two people to ever have access to the source code: just two of us conceived, designed, implemented, tested, and maintained the system. Our system beat enterprise solutions from well-funded large competitors year after year during customer evaluations which included testing employee-attempted data theft. It was not approved for export or use outside the US.

Developing commercial software provided the advantage of choosing the most appropriate language and framework for each part of the system because the customers didn't know what programming languages, tools, or frameworks were used.

Pinned

  1. cbor Public

    CBOR codec (RFC 8949) with CBOR tags, Go struct tags (toarray, keyasint, omitempty), float64/32/16, big.Int, and fuzz tested billions of execs.

    Go 593 54

  2. circlehash Public

    CircleHash is a family of fast hashes -- CircleHash64f is ideal for short inputs, reaching 10GB/s starting at <64 bytes and 15GB/s at 256 bytes (i7-1068NG7)

    Go 19 2

  3. The draft leading up to RFC8949

    Makefile 5 12

  4. Cadence, the resource-oriented smart contract programming language 🏃‍♂️

    Go 477 132

  5. float16 provides IEEE 754 half-precision format (binary16) with correct conversions to/from float32

    Go 46 4

  6. Atree provides scalable arrays and scalable ordered maps.

    Go 38 6

1,153 contributions in the last year

Contribution Graph
Day of Week August September October November December January February March April May June July
Sunday No contributions on Sunday, August 7, 2022 No contributions on Sunday, August 14, 2022 No contributions on Sunday, August 21, 2022 No contributions on Sunday, August 28, 2022 No contributions on Sunday, September 4, 2022 4 contributions on Sunday, September 11, 2022 6 contributions on Sunday, September 18, 2022 1 contribution on Sunday, September 25, 2022 1 contribution on Sunday, October 2, 2022 2 contributions on Sunday, October 9, 2022 No contributions on Sunday, October 16, 2022 2 contributions on Sunday, October 23, 2022 No contributions on Sunday, October 30, 2022 No contributions on Sunday, November 6, 2022 1 contribution on Sunday, November 13, 2022 No contributions on Sunday, November 20, 2022 No contributions on Sunday, November 27, 2022 4 contributions on Sunday, December 4, 2022 27 contributions on Sunday, December 11, 2022 12 contributions on Sunday, December 18, 2022 No contributions on Sunday, December 25, 2022 7 contributions on Sunday, January 1, 2023 No contributions on Sunday, January 8, 2023 No contributions on Sunday, January 15, 2023 No contributions on Sunday, January 22, 2023 1 contribution on Sunday, January 29, 2023 1 contribution on Sunday, February 5, 2023 No contributions on Sunday, February 12, 2023 4 contributions on Sunday, February 19, 2023 No contributions on Sunday, February 26, 2023 3 contributions on Sunday, March 5, 2023 No contributions on Sunday, March 12, 2023 No contributions on Sunday, March 19, 2023 No contributions on Sunday, March 26, 2023 No contributions on Sunday, April 2, 2023 No contributions on Sunday, April 9, 2023 No contributions on Sunday, April 16, 2023 No contributions on Sunday, April 23, 2023 5 contributions on Sunday, April 30, 2023 1 contribution on Sunday, May 7, 2023 10 contributions on Sunday, May 14, 2023 No contributions on Sunday, May 21, 2023 No contributions on Sunday, May 28, 2023 5 contributions on Sunday, June 4, 2023 4 contributions on Sunday, June 11, 2023 3 contributions on Sunday, June 18, 2023 9 contributions on Sunday, June 25, 2023 8 contributions on Sunday, July 2, 2023 No contributions on Sunday, July 9, 2023 No contributions on Sunday, July 16, 2023 No contributions on Sunday, July 23, 2023 7 contributions on Sunday, July 30, 2023 3 contributions on Sunday, August 6, 2023
Monday 5 contributions on Monday, August 8, 2022 No contributions on Monday, August 15, 2022 5 contributions on Monday, August 22, 2022 No contributions on Monday, August 29, 2022 No contributions on Monday, September 5, 2022 No contributions on Monday, September 12, 2022 1 contribution on Monday, September 19, 2022 1 contribution on Monday, September 26, 2022 1 contribution on Monday, October 3, 2022 3 contributions on Monday, October 10, 2022 2 contributions on Monday, October 17, 2022 No contributions on Monday, October 24, 2022 No contributions on Monday, October 31, 2022 2 contributions on Monday, November 7, 2022 1 contribution on Monday, November 14, 2022 8 contributions on Monday, November 21, 2022 31 contributions on Monday, November 28, 2022 3 contributions on Monday, December 5, 2022 8 contributions on Monday, December 12, 2022 No contributions on Monday, December 19, 2022 No contributions on Monday, December 26, 2022 No contributions on Monday, January 2, 2023 No contributions on Monday, January 9, 2023 No contributions on Monday, January 16, 2023 No contributions on Monday, January 23, 2023 21 contributions on Monday, January 30, 2023 9 contributions on Monday, February 6, 2023 8 contributions on Monday, February 13, 2023 2 contributions on Monday, February 20, 2023 9 contributions on Monday, February 27, 2023 2 contributions on Monday, March 6, 2023 1 contribution on Monday, March 13, 2023 No contributions on Monday, March 20, 2023 No contributions on Monday, March 27, 2023 11 contributions on Monday, April 3, 2023 No contributions on Monday, April 10, 2023 1 contribution on Monday, April 17, 2023 1 contribution on Monday, April 24, 2023 No contributions on Monday, May 1, 2023 1 contribution on Monday, May 8, 2023 6 contributions on Monday, May 15, 2023 No contributions on Monday, May 22, 2023 No contributions on Monday, May 29, 2023 9 contributions on Monday, June 5, 2023 5 contributions on Monday, June 12, 2023 No contributions on Monday, June 19, 2023 9 contributions on Monday, June 26, 2023 1 contribution on Monday, July 3, 2023 No contributions on Monday, July 10, 2023 1 contribution on Monday, July 17, 2023 No contributions on Monday, July 24, 2023 No contributions on Monday, July 31, 2023 2 contributions on Monday, August 7, 2023
Tuesday 1 contribution on Tuesday, August 9, 2022 No contributions on Tuesday, August 16, 2022 10 contributions on Tuesday, August 23, 2022 No contributions on Tuesday, August 30, 2022 No contributions on Tuesday, September 6, 2022 1 contribution on Tuesday, September 13, 2022 1 contribution on Tuesday, September 20, 2022 No contributions on Tuesday, September 27, 2022 1 contribution on Tuesday, October 4, 2022 4 contributions on Tuesday, October 11, 2022 No contributions on Tuesday, October 18, 2022 1 contribution on Tuesday, October 25, 2022 No contributions on Tuesday, November 1, 2022 No contributions on Tuesday, November 8, 2022 No contributions on Tuesday, November 15, 2022 16 contributions on Tuesday, November 22, 2022 39 contributions on Tuesday, November 29, 2022 No contributions on Tuesday, December 6, 2022 13 contributions on Tuesday, December 13, 2022 No contributions on Tuesday, December 20, 2022 No contributions on Tuesday, December 27, 2022 21 contributions on Tuesday, January 3, 2023 No contributions on Tuesday, January 10, 2023 No contributions on Tuesday, January 17, 2023 No contributions on Tuesday, January 24, 2023 8 contributions on Tuesday, January 31, 2023 8 contributions on Tuesday, February 7, 2023 19 contributions on Tuesday, February 14, 2023 No contributions on Tuesday, February 21, 2023 8 contributions on Tuesday, February 28, 2023 3 contributions on Tuesday, March 7, 2023 25 contributions on Tuesday, March 14, 2023 4 contributions on Tuesday, March 21, 2023 4 contributions on Tuesday, March 28, 2023 9 contributions on Tuesday, April 4, 2023 8 contributions on Tuesday, April 11, 2023 8 contributions on Tuesday, April 18, 2023 No contributions on Tuesday, April 25, 2023 1 contribution on Tuesday, May 2, 2023 1 contribution on Tuesday, May 9, 2023 7 contributions on Tuesday, May 16, 2023 No contributions on Tuesday, May 23, 2023 3 contributions on Tuesday, May 30, 2023 16 contributions on Tuesday, June 6, 2023 1 contribution on Tuesday, June 13, 2023 3 contributions on Tuesday, June 20, 2023 14 contributions on Tuesday, June 27, 2023 No contributions on Tuesday, July 4, 2023 6 contributions on Tuesday, July 11, 2023 4 contributions on Tuesday, July 18, 2023 1 contribution on Tuesday, July 25, 2023 10 contributions on Tuesday, August 1, 2023 No contributions on Tuesday, August 8, 2023
Wednesday 5 contributions on Wednesday, August 10, 2022 No contributions on Wednesday, August 17, 2022 2 contributions on Wednesday, August 24, 2022 No contributions on Wednesday, August 31, 2022 No contributions on Wednesday, September 7, 2022 No contributions on Wednesday, September 14, 2022 No contributions on Wednesday, September 21, 2022 1 contribution on Wednesday, September 28, 2022 11 contributions on Wednesday, October 5, 2022 4 contributions on Wednesday, October 12, 2022 No contributions on Wednesday, October 19, 2022 No contributions on Wednesday, October 26, 2022 No contributions on Wednesday, November 2, 2022 No contributions on Wednesday, November 9, 2022 No contributions on Wednesday, November 16, 2022 6 contributions on Wednesday, November 23, 2022 31 contributions on Wednesday, November 30, 2022 5 contributions on Wednesday, December 7, 2022 No contributions on Wednesday, December 14, 2022 No contributions on Wednesday, December 21, 2022 5 contributions on Wednesday, December 28, 2022 1 contribution on Wednesday, January 4, 2023 No contributions on Wednesday, January 11, 2023 No contributions on Wednesday, January 18, 2023 No contributions on Wednesday, January 25, 2023 7 contributions on Wednesday, February 1, 2023 2 contributions on Wednesday, February 8, 2023 9 contributions on Wednesday, February 15, 2023 No contributions on Wednesday, February 22, 2023 10 contributions on Wednesday, March 1, 2023 2 contributions on Wednesday, March 8, 2023 8 contributions on Wednesday, March 15, 2023 8 contributions on Wednesday, March 22, 2023 4 contributions on Wednesday, March 29, 2023 2 contributions on Wednesday, April 5, 2023 2 contributions on Wednesday, April 12, 2023 No contributions on Wednesday, April 19, 2023 7 contributions on Wednesday, April 26, 2023 7 contributions on Wednesday, May 3, 2023 No contributions on Wednesday, May 10, 2023 7 contributions on Wednesday, May 17, 2023 No contributions on Wednesday, May 24, 2023 2 contributions on Wednesday, May 31, 2023 2 contributions on Wednesday, June 7, 2023 No contributions on Wednesday, June 14, 2023 No contributions on Wednesday, June 21, 2023 1 contribution on Wednesday, June 28, 2023 3 contributions on Wednesday, July 5, 2023 2 contributions on Wednesday, July 12, 2023 3 contributions on Wednesday, July 19, 2023 1 contribution on Wednesday, July 26, 2023 3 contributions on Wednesday, August 2, 2023
Thursday No contributions on Thursday, August 11, 2022 No contributions on Thursday, August 18, 2022 No contributions on Thursday, August 25, 2022 No contributions on Thursday, September 1, 2022 No contributions on Thursday, September 8, 2022 No contributions on Thursday, September 15, 2022 No contributions on Thursday, September 22, 2022 1 contribution on Thursday, September 29, 2022 2 contributions on Thursday, October 6, 2022 1 contribution on Thursday, October 13, 2022 No contributions on Thursday, October 20, 2022 No contributions on Thursday, October 27, 2022 No contributions on Thursday, November 3, 2022 No contributions on Thursday, November 10, 2022 14 contributions on Thursday, November 17, 2022 No contributions on Thursday, November 24, 2022 7 contributions on Thursday, December 1, 2022 10 contributions on Thursday, December 8, 2022 No contributions on Thursday, December 15, 2022 No contributions on Thursday, December 22, 2022 5 contributions on Thursday, December 29, 2022 No contributions on Thursday, January 5, 2023 No contributions on Thursday, January 12, 2023 No contributions on Thursday, January 19, 2023 No contributions on Thursday, January 26, 2023 No contributions on Thursday, February 2, 2023 7 contributions on Thursday, February 9, 2023 18 contributions on Thursday, February 16, 2023 No contributions on Thursday, February 23, 2023 2 contributions on Thursday, March 2, 2023 No contributions on Thursday, March 9, 2023 3 contributions on Thursday, March 16, 2023 15 contributions on Thursday, March 23, 2023 5 contributions on Thursday, March 30, 2023 7 contributions on Thursday, April 6, 2023 9 contributions on Thursday, April 13, 2023 15 contributions on Thursday, April 20, 2023 No contributions on Thursday, April 27, 2023 No contributions on Thursday, May 4, 2023 No contributions on Thursday, May 11, 2023 1 contribution on Thursday, May 18, 2023 No contributions on Thursday, May 25, 2023 3 contributions on Thursday, June 1, 2023 No contributions on Thursday, June 8, 2023 1 contribution on Thursday, June 15, 2023 3 contributions on Thursday, June 22, 2023 16 contributions on Thursday, June 29, 2023 14 contributions on Thursday, July 6, 2023 No contributions on Thursday, July 13, 2023 1 contribution on Thursday, July 20, 2023 No contributions on Thursday, July 27, 2023 22 contributions on Thursday, August 3, 2023
Friday 1 contribution on Friday, August 12, 2022 2 contributions on Friday, August 19, 2022 No contributions on Friday, August 26, 2022 No contributions on Friday, September 2, 2022 No contributions on Friday, September 9, 2022 No contributions on Friday, September 16, 2022 No contributions on Friday, September 23, 2022 No contributions on Friday, September 30, 2022 1 contribution on Friday, October 7, 2022 No contributions on Friday, October 14, 2022 No contributions on Friday, October 21, 2022 2 contributions on Friday, October 28, 2022 No contributions on Friday, November 4, 2022 No contributions on Friday, November 11, 2022 1 contribution on Friday, November 18, 2022 4 contributions on Friday, November 25, 2022 2 contributions on Friday, December 2, 2022 4 contributions on Friday, December 9, 2022 1 contribution on Friday, December 16, 2022 No contributions on Friday, December 23, 2022 1 contribution on Friday, December 30, 2022 1 contribution on Friday, January 6, 2023 No contributions on Friday, January 13, 2023 No contributions on Friday, January 20, 2023 No contributions on Friday, January 27, 2023 No contributions on Friday, February 3, 2023 10 contributions on Friday, February 10, 2023 22 contributions on Friday, February 17, 2023 No contributions on Friday, February 24, 2023 10 contributions on Friday, March 3, 2023 2 contributions on Friday, March 10, 2023 2 contributions on Friday, March 17, 2023 7 contributions on Friday, March 24, 2023 20 contributions on Friday, March 31, 2023 No contributions on Friday, April 7, 2023 No contributions on Friday, April 14, 2023 1 contribution on Friday, April 21, 2023 No contributions on Friday, April 28, 2023 No contributions on Friday, May 5, 2023 No contributions on Friday, May 12, 2023 No contributions on Friday, May 19, 2023 No contributions on Friday, May 26, 2023 4 contributions on Friday, June 2, 2023 3 contributions on Friday, June 9, 2023 No contributions on Friday, June 16, 2023 2 contributions on Friday, June 23, 2023 9 contributions on Friday, June 30, 2023 4 contributions on Friday, July 7, 2023 5 contributions on Friday, July 14, 2023 No contributions on Friday, July 21, 2023 No contributions on Friday, July 28, 2023 44 contributions on Friday, August 4, 2023
Saturday No contributions on Saturday, August 13, 2022 3 contributions on Saturday, August 20, 2022 2 contributions on Saturday, August 27, 2022 No contributions on Saturday, September 3, 2022 5 contributions on Saturday, September 10, 2022 5 contributions on Saturday, September 17, 2022 3 contributions on Saturday, September 24, 2022 3 contributions on Saturday, October 1, 2022 No contributions on Saturday, October 8, 2022 No contributions on Saturday, October 15, 2022 No contributions on Saturday, October 22, 2022 No contributions on Saturday, October 29, 2022 No contributions on Saturday, November 5, 2022 No contributions on Saturday, November 12, 2022 2 contributions on Saturday, November 19, 2022 No contributions on Saturday, November 26, 2022 No contributions on Saturday, December 3, 2022 No contributions on Saturday, December 10, 2022 No contributions on Saturday, December 17, 2022 No contributions on Saturday, December 24, 2022 7 contributions on Saturday, December 31, 2022 No contributions on Saturday, January 7, 2023 No contributions on Saturday, January 14, 2023 No contributions on Saturday, January 21, 2023 1 contribution on Saturday, January 28, 2023 No contributions on Saturday, February 4, 2023 No contributions on Saturday, February 11, 2023 No contributions on Saturday, February 18, 2023 No contributions on Saturday, February 25, 2023 10 contributions on Saturday, March 4, 2023 No contributions on Saturday, March 11, 2023 No contributions on Saturday, March 18, 2023 No contributions on Saturday, March 25, 2023 No contributions on Saturday, April 1, 2023 No contributions on Saturday, April 8, 2023 No contributions on Saturday, April 15, 2023 No contributions on Saturday, April 22, 2023 No contributions on Saturday, April 29, 2023 6 contributions on Saturday, May 6, 2023 No contributions on Saturday, May 13, 2023 No contributions on Saturday, May 20, 2023 No contributions on Saturday, May 27, 2023 5 contributions on Saturday, June 3, 2023 No contributions on Saturday, June 10, 2023 4 contributions on Saturday, June 17, 2023 2 contributions on Saturday, June 24, 2023 No contributions on Saturday, July 1, 2023 No contributions on Saturday, July 8, 2023 2 contributions on Saturday, July 15, 2023 No contributions on Saturday, July 22, 2023 No contributions on Saturday, July 29, 2023 3 contributions on Saturday, August 5, 2023
Activity overview
Contributed to onflow/ccf, fxamacker/ccf_draft, onflow/cadence and 18 other repositories