Every 9 minutes someone in the US dies of blood cancer [1], and 186,000 patients are diagnosed with blood cancer every year [2]. The best way to save these patients is through a process known as Stem Cell Transplantation Therapy, a process in which you take stem cells from a healthy donor and engraft them into a sick patient. The matching criteria between a donor and a patient are very stringent, and they highly depend on matching individuals based on ancestry and ethnicity (i.e., HLA genetics). In over 70% of cases, donors cannot find a match in their immediate family and are forced to search national stem cell registries; these registries consist of a large database of volunteer donors that are called up on a case-by-case basis [3].
The US national stem cell registry finds donors for 79% of white blood cancer patients, 48% of Hispanic patients, 47% of Pacific Islander patients, and only 29% of African American patients [4]. Ethnic minority individuals are highly skeptical of the US healthcare system because of many prior instances of abuse and mistrust, and this causes thousands of patients to die needlessly every year. We are a creating a platform that centers on transparency, ownership, and benefit sharing, such that donors can rebuild their trust with the healthcare system and no blood cancer patient dies too soon again. This platform is uniquely designed in a way that it can serve many further healthcare applications, and ultimately become the bedrock of the future of US healthcare.
There are numerous stem cell registries and advocacy groups in the US, but all these are managed by, and feed donor and patient transplant data into, the federally contracted National Marrow Donor Program (NMDP) or “Be the Match” [5]. The NMDP manages all requests for allogenic stem cells, and hence the current donor acquisition and search and match process is highly centralized; the NMDP takes stem cells from altruistic donors “for free” and sells them to patients in need for $40K, and the donor receives nothing. Aside from the lack of monetary incentives, this feeds into a larger issue that national research is based on “broad consent”, which means that donors sign off on the fact that the managing medical body can do whatever they like with the donated genetic material. This, among other things, has led to an increasing lack of trust in the US healthcare system; only 5% of clinical trial participants are black [6], African-Americans only make up 10% of COVID-19 vaccine recipients [7], and in the dawning era of precision medicine, the NIH is desperately looking for ways to build a firmer foundation of trust [8]
Doctors and researchers search for donations by matching the genes of the donor's HLA haplotype (which is a combination of the donor's HLA-A, HLA-B, HLA-C, HLA-DPB, HLA-DRB gene alleles) to their desired haplotype. To protect the donor's identity and data, their HLA data cannot be stored unencrypted on the blockchain. Thus we store the donor's HLA data as a struct of hashes corresponding to each of their HLA genes. The match rate of a search is determined by matching the hashed genes to the hashes of a doctor/researcher's search inputs (E.G. If one gene hash matches the corresponding input hash then the match rate would be 1/5).
Potential Security Flaw: Users can potentially determine the donor's HLA Haplotype data via these matches. In the future, we plan to handle matching with a different method to prevent this from happening. Having said that, the HLA genomic region is the most polymorphic in the human genome; there are over 71,236 different HLA alleles that are known and sequenced, and the HLA diversity of the human population is ever expanding [9]. Identifying a specific individual, let alone their personal or identifying data information, would be extremely difficult to decrypt via an HLA haplotype.
In addition to hashes, an encryption of the donors' HLA data is stored on-chain. Our backend can then decrypt the donor's HLA data at the request of a verified doctor/researcher. Encryption/decryption is handled by amino-backend with the AES-JS engine.
The full genetic sequence and health data of the donors are encoded and stored in IPFS. amino-backend handles the encoding,
storing in IPFS, fetching from IPFS, and decoding of the data. For reference, amino-backend uploadGenomeToIpfs
function and
/decode-genome/:tokenId
endpoint, also refer to test/Ipfs.test.ts as an example.
Doctors'/researchers' wallets also are required to be verified before they are permitted to purchase stem cells. For now, we handled this by assuming that all addresses are verified via the amino-backend endpoint /is-it-doctor-or-researcher-address/:address
. By utilizing ChainLink Any API, we can whitelist addresses within the AminoChainMarketplace contract based on a call to our API. Thus simulating the verification process of a doctor/researcher. The full implementation of the verification process is outside of the scope of the current development phase, but a long term solution that we would be extremely interested in implementing would be Chainlink DECO to manage KYC checks [10].
The process of purchasing stem cells includes the physical tracking of donations as well as an escrow system to deter bad actors. The doctor/reseacher initiates a sale (with their whitelisted wallet) by sending payment (USDC tokens) to the AminoChainMarketplace contract. The contract then holds them in escrow until the delivery is complete. Durring this step, the specified tokenized donation (NFT) is also transferred from the AminoChainAuthenticator to the AminoChainMarketplace to be held in escrow. As the physical delivery is initiated and updated, it gets tracked by the delivery_client. After the stem cells are delivered, delivery_client sets the delivery status of the corresponding tokenId to DELIVERED
. Upon this state change, Chainlink Automation detects that the payment and token need to be unescrowed. Chainlink Automation does this by calling completeItemSale
which transfers the NFT to the buyer, an incentive to the donor wallet, the payment to the biobank wallet, and a protocol fee to AminoChainAuthenticator contract. In the case of a delivery not taking place within 30 days, Chainlink Automation will call refundSale
which will unescrow and transfer payment back to the buyer and the NFT back to AminoChainAuthenticator contract.
- Biobank enters HLA data, genome data, and donation packing quantities in CC (cubic centimeters) in http://amino-vercel-app.vercel.app/biobank/appointments/register
- Donor connects his/her wallet by scanning the authentication QR code
- Donor signs message
- amino-backend encodes HLA and genome data, then uploads encoded genome to IPFS and registers the donation by calling the
register
method of AminoChainAuthenticator contract - Donation is automatically listed on marketplace (AminoChainMarketplace contract)
- Donor can now see his tokenized donation on https://amino-vercel-app.vercel.app/donate/profile. Also, Doctors and Researchers can now find the donation on the marketplace https://amino-vercel-app.vercel.app/marketplace
- Doctors/Reseachers are verfied and whitlisted to buy via
requestBuyAccess
on AminoChainMarketplace - Doctors/Reseachers search for desired stem cells by inputting desired HLA Haplotype data on https://amino-vercel-app.vercel.app/marketplace
- Best matching donation is automaticaly determined. E.G: https://amino-vercel-app.vercel.app/marketplace/nft?tokenId=11&matchRating=100
- Then doctor/reseacher connects their wallet by pressing
gm, insert wallet address
and selecting their wallet - Prior to purchasing, the buyer may need to know HLA Haplotype, genetic sequence, and health data of the donation. To get this data they can reveal
HLA Haplotypes
andGenome and Donor Condition Details
- To purchase, the doctor press
Buy Now
and confirms transactions. If its their first purchase, they need to give USDC allowance to the AminoChainMarketplace contract via a seperate transaction.
- On the purchase of stem cells, USDC payment, and NFT are escrowed in the AminoChainMarketplace and the physical delivery status of the stem cells is tracked by delivery_client
- AminoChainMarketplace
updateDeliveryStatus
method is called in the event of a delivery status update. The stem cells' on-chain status could be updated toIN_TRANSIT
orDELIVERED
based on the physical state. - If the delivery status is
DELIVERED
, Chainlink Automation will callpreformUpKeep
which will then call AminoChainMarketplacecompleteItemSale
- Upon a sale being completed, the NFT will be sent to the buyer, an incentive will be transferred to the donor, a fee will be transferred to AminoChainAuthenticator, and the rest of the payment will be transferred to the BioBank's wallet address
We used Chainlink Automation to release the escrowed tokens for a given tokenId's pending sale. After determining if the tokens need to be unescrowed (either in the event of delivered stem cells or a refund), it will transfer the escrowed tokens to the parties involved in the sale. This includes the donor, buyer, bioBank and AminoChainAuthenticator contract.
Click to view Tx on Polygonscan
We used Chainlink Any Api to whitelist doctors/reseachers, which allows them to buy stem cells on our AminoChainMarketplace contract. This is done by making a HTTP GET request to our amino-backend endpoint /is-it-doctor-or-researcher-address/:address
. If the endpoint returns true then the user's wallet address is whitelisted and they are allowed to purchase stem cells.
Click to view ChainlinkRequested Tx on Polygonscan Click to view ChainlinkFullfilled Tx on Polygonscan
We used IPFS to store the full genetic sequence and health data of the donors. When a bioBank registers (mints) NFTs to represent the donor's donation, the donor's genetic sequence and health data is encoded and stored on IPFS via Web3 Storage. amino-backend handles the encoding, storing in IPFS, fetching from IPFS, and decoding of the data. This data can then be fetched by verified doctors/reseachers prior to their purchase of stem cells.
Click to view an encoded genome stored on IPFS
- amino-backend -- Backend
- amino-contracts -- Smart Contracts
- amino-subgraph -- Subgraph
- Amino-Vercel-App -- UI
- delivery_client -- Delivery tracking
MockUSDC: 0xC203D5b1356cc1C71791185Cc51aDbd2226221B6
AminoChainMarketplace: 0x66d37c30B6fFAC63F47658432a33ee5012C34188
AminoChainDonation: 0x61048058C2ac5BcCD10aeF9BaBDC56250DC5753B
AminoChainAuthenticator: 0xcB14fc2373e536ffb131795A2eabD8Cab57bd105