Publish3 is a Movement-powered platform that enables users to publish, discover, and purchase academic documents in a fair, and transparent way, with on chain guarantees.
Authors specify the price and are rewarded directly for their work, readers gain permanent access to purchased knowledge, and the blockchain guarantees ownership, payments, and attribution—without relying on traditional publishing intermediaries.
Demo: https://publish3-front.vercel.app/
Demo video: https://www.youtube.com/watch?v=VNNVStkRLE4
Publish3 acts as both a host and an intermediary between authors and readers.
Users can:
- Browse published academic papers, documents, and research texts
- Read abstracts before purchasing
- Purchase documents and retain permanent access
- Trust the blockchain as the source of truth for ownership and payments
Each purchase is recorded on-chain and linked to the user’s Privy embedded wallet, ensuring verifiable ownership. The smart contract guarantees that payments are distributed directly to the authors of the publication.
Becoming an author is simple:
-
Register as an author
-
Upload your document
-
Define:
- Title and metadata
- Price (in MOVE)
- Author list (supporting multiple authors)
-
Publish
Once submitted, the publication becomes instantly available for users to discover and purchase.
- Browse academic publications
- Publish research and documents
- Embedded wallets (no external setup required)
- Authors set their own prices
- Direct revenue distribution to authors
- Blockchain-backed ownership and payments
Publish3 aims to align the interests of readers and authors:
- Readers gain access to high-quality academic content at fair prices
- Authors receive the majority of the revenue generated by their work
- No traditional publishing intermediaries
-
Publish3 takes 10% of each purchase
-
90% goes directly to the authors
-
The platform fee covers:
- Development
- Infrastructure
- Storage
- Maintenance
Note: The 10% fee is currently an arbitrary value. A future market analysis is required to properly balance sustainability and competitiveness.
-
Frontend
- React + Node.js
- Material UI component library (licensed)
-
Backend
- Rust
- Actix Web framework
- MySQL database
- S3-compatible storage for documents
-
Authentication
- Privy for user identity and wallet management
- Token verification performed locally in the backend
-
Blockchain
- Smart contract deployed on Movement M1 Testnet
Although wallets are Privy-embedded, most wallet operations are coordinated by the backend. Privy is used primarily for secure transaction signing.
Authentication is handled via Privy, following their recommended integration flow.
- GitHub
- External wallets
On the frontend, a Privy Provider wraps the React application.
On the backend:
- An Actix Web middleware intercepts incoming requests
- Tokens are validated locally using Privy’s public key
- No direct API calls to Privy are required for verification
- Wallets are automatically generated for authenticated users
- Wallet creation is triggered from the backend via Privy’s API
- Each wallet is associated with a signature authority
- This authority is used to request Privy to sign raw transactions
Privy currently provides Tier-2 support for Movement, meaning:
- Wallet management cannot be fully handled client-side
- Transaction preparation and signing orchestration is handled by the backend
- Privy remains responsible for cryptographic signing only
The backend server acts as the P3Authority.
- The smart contract is deployed
- The server immediately calls
initialize - The server becomes the publication authority
Publishing is secured using capability-based access control, ensuring that only authorized users can publish specific documents, while keeping all final actions user-signed and on-chain.
When a user publishes a document:
- The server grants the user a temporary capability
- The user mints the capability
- The user calls the
publishfunction
This design was made with the following ideas in mind:
- Only authorized users can publish
- Capabilities are single-use and document-specific
- Server cannot publish on behalf of users
- Users keep full control over transactions
- Prevents external or malicious contract calls
sequenceDiagram
participant U as User
participant FE as Frontend
participant BE as Backend (P3Authority)
participant P as Privy
participant BC as Movement Blockchain
U->>FE: Request to publish document
FE->>BE: Publish request (metadata + document hash)
BE->>BE: Create publication capability
Note right of BE: Capability signed with\nP3Authority private key\nBound to document hash
BE->>P: Request signature for mint-capability tx
P-->>BE: Signed raw transaction
BE->>BC: Submit mint-capability transaction
BC-->>BE: Capability minted & transferred to user
BE->>P: Request signature for publish tx
P-->>BE: Signed raw transaction
BE->>BC: Submit publish transaction
BC-->>U: Publication finalized on-chain
The backend can request Privy to sign a transaction on behalf of the client's wallet because each wallet is associated to a signature authority in Privy, whose private key is configured in the backend. So the wallets are not fully on the hands of the users, but this is a limitation due to the Tier 2 support that Privy provides for Movement. The only way to sign transactions using these wallets is this way through the backend. When tier 1 support is provided, we would migrate the wallet's ownership directly to the client application.
sequenceDiagram
participant U as User
participant FE as Frontend
participant BE as Backend (P3Authority)
participant P as Privy
participant BC as Movement Blockchain
participant A as Authors
U->>FE: Request to purchase document
FE->>BE: Purchase request (document ID)
BE->>BE: Verify user authorization & document availability
BE->>P: Request signature for purchase tx
P-->>BE: Signed raw transaction
BE->>BC: Submit purchase transaction
BC-->>BE: Purchase confirmed on-chain
BC-->>U: Purchase confirmed on-chain
BC-->>A: Royalties distributed to authors
BE-->>U: Access is granted to the document
-
Transactions are simulated first
-
Estimated cost is shown to the user
-
The user approves or rejects the transaction
-
Upon approval:
- A raw transaction is generated
- Privy signs it on behalf of the user
- The transaction is submitted to the blockchain
Neither purchases nor publications require server signatures—only user authorization. The server only issues the required capabilities.

