The Inspiration Behind Proof of Picture

In times of war and unrest, it’s very hard for people outside of the conflict zone to know what really is going on. This is because it’s hard for reporters to get to these areas.

That’s why we need the help of locals - people living on the ground to take pics and get them out. Unfortunately, there are a number of barriers to this.

Problem 1: Authenticity

Citizen journalism has become huge thanks to social media, but unfortunately, images from individuals can can not be verified as authentic. With the dawn of AI, there have been many situations where images of “real life” events that were publicized in news or online have been found to be AI-generated. This has made it easy for propagandists to distort the truth; for example: Facebook group used an AI-generated picture of the Pope to inflate the numbers of attendees at a visit of the Pope in Lisbon.

Problem 2: Connectivity

How do normal people in was zones get connected with publications that need images they have? This is the biggest barrier to citizen journalism.

Problem 3: Payment

Citizen journalists that take photos that are valuable for publication are rarely paid for their work - this is because it’s difficult to contact these individuals and payment systems in conflict zones are often not functioning.

Meet Proof of Picture

What if we had a way to request photos from war zones, get submissions from locals, verify the authenticity of photos, and help people earn a living in times of war?

With Proof of Picture, this is now possible.

Proof of Picture is a marketplace where publications can ask for images, people can submit images that get verified as non-AI with novel C2PA technology. Photographers can earn from verified images they submit through pay-outs from publications.

How we Build Proof of Picture

⭐ C2PA for image verification

What it is: C2PA is an open technical standard providing publishers, creators, and consumers the ability to trace the origin of different types of media - verifying if an image was generated by AI or not, verifying where an image was taken, and more. It was invented through a partnership between companies like Adobe, Intel, Nikon, Sony and is making headway in gaining adoption globally.

How we use it: When a photographer uploads a picture on the marketplace, it automatically goes through a C2PA check before it’s given to the publication that requested it.

See it: ADD WHERE IMPLEMENTED

⭐ Request Network for escrow and invoice receipts

What it is: Request Network is a financial services ecosystem based around an interoperable standard for reading and writing invoices. Having our escrow transactions and invoices work with Request means that photographers who earn on our platform will have access to things like lending based on on-chain work history, employment insurance, and more in the future.

How we use it: We use Request Network’s escrow system for payments and we generate events that emit Request Network invoices.

See it: https://github.com/Proof-Of-Photo/Dapp/blob/main/src/utils/requestNetwork.ts https://github.com/Proof-Of-Photo/smart-contracts/blob/main/contracts/TalentLayerEscrow.sol https://github.com/Proof-Of-Photo/smart-contracts/blob/main/contracts/TalentLayerEscrowV2.sol

⭐ TalentLayer for hiring workflows

What it is: TalentLayer is a hiring platform ecosystem with a developer toolkit to build on-chain work marketplaces. TalentLayer has components for job posts, escrow, user reputation, and more.

How we use it: We forked TalentLayer’s smart contracts and removed the existing escrow contract. Then, we edited the remaining contracts to interact with the Request Network escrow contract. This resulted in a system where we now have TalentLayer-based on-chain job posts and proposes, Request-based escrow, and TalentLayer-based user identity. We also used the TalentLayer StarterKit boilerplate as a starting point for our frontend.

See it: https://github.com/Proof-Of-Photo/smart-contracts/tree/main/contracts https://github.com/Proof-Of-Photo/subgraph

⭐ Mantle

What it is: Mantle is a rollup with low fees, secured by Ethereum. Mantle’s fast transaction speeds make it perfect for publications who need urgent photographs of real-time events thanks to fast speed of payments.

How we use it: We use Request Network on Mantle and we created an implementation of TalentLayer on Mantle.

See it: https://github.com/Proof-Of-Photo/smart-contracts/blob/main/Makefile https://github.com/Proof-Of-Photo/smart-contracts/blob/main/hardhat.config.ts https://github.com/Proof-Of-Photo/smart-contracts/blob/main/networkConfig.ts

⭐ Celo

What it is: Celo is a blockchain protocol with low-fees and a thriving community of public goods projects. All transactions on Celo are carbon neutral, so it’s a good option for publications and photographers who care about preservation of the environment.

How we use it: We use Request Network on Celo and we created an implementation of TalentLayer on Celo.

*See it: * https://github.com/Proof-Of-Photo/smart-contracts/blob/main/Makefile https://github.com/Proof-Of-Photo/smart-contracts/blob/main/hardhat.config.ts https://github.com/Proof-Of-Photo/smart-contracts/blob/main/networkConfig.ts https://github.com/Proof-Of-Photo/subgraph/blob/main/Makefile https://github.com/Proof-Of-Photo/subgraph/blob/main/networks.json

Challenges We Faced

Our biggest challenge was around C2PA. We are one of the first open-source projects to ever implement it, therefore we didn’t have any examples to go off of aside from the ones provided in the C2PA documentation (which were very limited). We could not get their Javascript SDK working, so we ended up having to use their Rust SDK. Only problem is, we don’t really know Rust haha. This was a challenge, but we ended up shipping the basic implementation of writing data and validating it with C2PA.

We also had challenges deploying our smart contracts - this took WAY longer than we thought.

We also had an issue with the C2PA library that wouldn't let our project build on vercel so sadly no live site on vercel - just locally.

Now, we’re proud to offer this as an example implementation to other open-source projects so that it can be easier for others in the future!

Share this project:

Updates