Skip to content

Commit

Permalink
rename
Browse files Browse the repository at this point in the history
  • Loading branch information
Giannis Chatziveroglou committed Sep 21, 2023
1 parent 308dcd3 commit 1b85dce
Show file tree
Hide file tree
Showing 30 changed files with 86 additions and 21,051 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ jobs:
- name: Setup
run: mkdir -p target/deploy
- run: cp -r tests/test-keypairs/* target/deploy
- run: find . -type f -name "*" -exec sed -i'' -e "s/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/$(solana-keygen pubkey tests/test-keypairs/cardinal_generator-keypair.json)/g" {} +
- run: find . -type f -name "*" -exec sed -i'' -e "s/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/$(solana-keygen pubkey tests/test-keypairs/solana_nft_programs_generator-keypair.json)/g" {} +
- run: find . -type f -name "Anchor.toml" -exec sed -i'' -e "s/yarn mocha tests\/\*.spec.ts/yarn mocha tests\/\*.spec.ts --reporter mocha-junit-reporter --reporter-options mochaFile=.\/tests\/out.xml/g" {} +

- name: Run tests
Expand Down
8 changes: 4 additions & 4 deletions Anchor.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ cluster = "localnet"
wallet = "./tests/test-key.json"

[programs.mainnet]
cardinal_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"
solaana_nft_programs_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"

[programs.devnet]
cardinal_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"
solaana_nft_programs_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"

[programs.testnet]
cardinal_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"
solaana_nft_programs_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"

[programs.localnet]
cardinal_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"
solaana_nft_programs_generator = "genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT"
24 changes: 12 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ install:

test-keys:
anchor build
LC_ALL=C find programs src -type f -exec sed -i '' -e "s/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/$$(solana-keygen pubkey ./target/deploy/cardinal_generator-keypair.json)/g" {} +
LC_ALL=C find programs src -type f -exec sed -i '' -e "s/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/$$(solana-keygen pubkey ./target/deploy/solana_nft_programs_generator-keypair.json)/g" {} +
anchor build

build:
Expand All @@ -19,7 +19,7 @@ build:
start:
solana-test-validator --url https://api.devnet.solana.com \
--clone metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s --clone PwDiXFxQsGra4sFFTT8r1QWRMd4vfumiWC1jfWNfdYT \
--bpf-program ./target/deploy/cardinal_generator-keypair.json ./target/deploy/cardinal_generator.so \
--bpf-program ./target/deploy/solana_nft_programs_generator-keypair.json ./target/deploy/solana_nft_programs_generator.so \
--reset --quiet & echo $$! > validator.PID
sleep 5
solana-keygen pubkey ./tests/test-key.json
Expand All @@ -32,7 +32,7 @@ test:
anchor test --skip-local-validator --skip-build --skip-deploy --provider.cluster localnet

clean-test-keys:
LC_ALL=C find programs src -type f -exec sed -i '' -e "s/$$(solana-keygen pubkey ./target/deploy/cardinal_generator-keypair.json)/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/g" {} +
LC_ALL=C find programs src -type f -exec sed -i '' -e "s/$$(solana-keygen pubkey ./target/deploy/solana_nft_programs_generator-keypair.json)/genSsTXZaAGH1kRUe74TXzwuernqZhJksHvpXiAxBQT/g" {} +

stop: validator.PID
pkill solana-test-validator
82 changes: 3 additions & 79 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,8 @@
# Cardinal Generator

[![License](https://img.shields.io/badge/license-AGPL%203.0-blue)](https://github.com/cardinal-labs/cardinal-generator/blob/master/LICENSE)
[![Release](https://github.com/cardinal-labs/cardinal-generator/actions/workflows/release.yml/badge.svg?branch=v0.0.27)](https://github.com/cardinal-labs/cardinal-generator/actions/workflows/release.yml)

<p align="center">
<img src="./images/banner.png" />
</p>

<p align="center">
An open protocol for generative NFTs.
</p>
# Generator

## Background

Cardinal generator encompasses serverless functions and smart contracts for rendering generative NFTs. The API defines a standard way to point to indicate pointers to any on-chain data that will be dynamically read and returned into the metadata of the NFT. In addition, there is an implementation of an on-chain mapping that fits this API spec to allow for more complex updating of this mapping. Cardinal generator works well with standard NFT collections and fits within the Metaplex NFT standard. It also composes with other programs in the Cardinal NFT infrastructure ecosystem.

## Packages

| Package | Description | Version | Docs |
| :-------------------- | :----------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- |
| `cardinal-generator` | Solana program for mapping a mint to any on-chain attributes | [![Crates.io](https://img.shields.io/crates/v/cardinal-stake-pool)](https://crates.io/crates/cardinal-stake-pool) | [![Docs.rs](https://docs.rs/cardinal-stake-pool/badge.svg)](https://docs.rs/cardinal-stake-pool) |
| `@cardinal/generator` | TypeScript SDK for generator | [![npm](https://img.shields.io/npm/v/@cardinal/generator.svg)](https://www.npmjs.com/package/@cardinal/generator) | [![Docs](https://img.shields.io/badge/docs-typedoc-blue)](https://cardinal-labs.github.io/cardinal-generator/) |
Generator encompasses serverless functions and smart contracts for rendering generative NFTs. The API defines a standard way to point to indicate pointers to any on-chain data that will be dynamically read and returned into the metadata of the NFT. In addition, there is an implementation of an on-chain mapping that fits this API spec to allow for more complex updating of this mapping. Generator works well with standard NFT collections and fits within the Metaplex NFT standard. It also composes with other programs in the NFT infrastructure ecosystem.

## Addresses

Expand Down Expand Up @@ -55,62 +37,4 @@ Dynamic attributes have a separate parameters that allows for generic setting of
: fieldGroup[1] ?? fieldGroup[0],
trait_type: fieldGroup[2] ?? fieldGroup[0],
}
```

This is a summary of logic in the metadata-generator handler

Example getting “stakeBoost” from this staked NFT
https://nft.cardinal.so/metadata/9Pt7GiyL5N4Zc2cEcLd112GpZhCD9KWxnYE4h9DmRpDo?uri=https://arweave.net/BpIxD8LTr4934uk237kdc4QvCD_PWrY-51Dayh7h5V0&attrs=9kRs4BPUqYh3Vk1v1J8WE694afGFjfi4QeF3AfVUbfMn.StakeEntry.stakeBoost

Example getting “stakeBoost” from this staked NFT and naming it Boost
https://nft.cardinal.so/metadata/9Pt7GiyL5N4Zc2cEcLd112GpZhCD9KWxnYE4h9DmRpDo?uri=https://arweave.net/BpIxD8LTr4934uk237kdc4QvCD_PWrY-51Dayh7h5V0&attrs=9kRs4BPUqYh3Vk1v1J8WE694afGFjfi4QeF3AfVUbfMn.StakeEntry.Boost:stakeBoost

Example getting all fields from this staked NFT account
[https://nft.cardinal.so/metadata/9Pt7GiyL5N4Zc2cEcLd112GpZhCD9KWxnYE4h9DmRpDo?uri=https://arweave.net/BpIxD8LTr4934uk237kdc4QvCD_PWrY-51Dayh7h5V0&attrs=9kRs4BPUqYh3Vk1v1J8WE694afGFjfi4QeF3AfVUbfMn.StakeEntry.\*](https://nft.cardinal.so/metadata/9Pt7GiyL5N4Zc2cEcLd112GpZhCD9KWxnYE4h9DmRpDo?uri=https://arweave.net/BpIxD8LTr4934uk237kdc4QvCD_PWrY-51Dayh7h5V0&attrs=9kRs4BPUqYh3Vk1v1J8WE694afGFjfi4QeF3AfVUbfMn.StakeEntry.*)

Example getting multiple fields from this staked NFT account
https://nft.cardinal.so/metadata/9Pt7GiyL5N4Zc2cEcLd112GpZhCD9KWxnYE4h9DmRpDo?uri=https://arweave.net/BpIxD8LTr4934uk237kdc4QvCD_PWrY-51Dayh7h5V0&attrs=9kRs4BPUqYh3Vk1v1J8WE694afGFjfi4QeF3AfVUbfMn.StakeEntry.Boost:stakeBoost,Seconds%20staked:totalStakeSeconds

## Overlay Text

Text param is used to overaly specific text on the base image. The test param supports bare text and has a concept of "styles" to style the text in various ways

Styles

- None
- Basic white test
- e.g. https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=none:TEXT

<div style="text-align: center; width: 100%;">
<img style="height: 250px" src="https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=none:TEXT" />
</div>

- Overlay
- Overlay text centered over the image with a partially transparent background and border
- e.g. https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=overlay:TEXT

<div style="text-align: center; width: 100%;">
<img style="height: 250px" src="https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=overlay:TEXT" />
</div>

- Header
- Header text at the top of the image
- e.g https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=header:HEADER

<div style="text-align: center; width: 100%;">
<img style="height: 250px" src="https://nft.cardinal.so/img/D4vFpxAi9JFC5KaFyM3R92BbxP1Fu1daKSay53Uo9cgF?uri=https://arweave.net/QPsEEJ-YpRjF35LzHWGhuknJ0tdN7n0ehjxpvpwFYmE?ext=jpg&text=header:HEADER" />
</div>

## Questions & Support

If you are developing using Cardinal generator contracts and libraries, feel free to reach out for support on Discord. We will work with you or your team to answer questions, provide development support and discuss new feature requests.

For issues please, file a GitHub issue.

> https://discord.gg/hBWw5pwXUq
## License

Cardinal generators is licensed under the GNU Affero General Public License v3.0.

In short, this means that any changes to this code must be made open source and available under the AGPL-v3.0 license, even if only used privately.
```
6 changes: 3 additions & 3 deletions api/common/firebase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { getStorage } from "firebase/storage";

const firebaseConfig = {
apiKey: "AIzaSyCJgPBVSp2TokeX_UpydLf4M7yamYA0nhs",
authDomain: "cardinal-events.firebaseapp.com",
projectId: "cardinal-events",
storageBucket: "cardinal-events.appspot.com",
authDomain: "solana-nft-programs-events.firebaseapp.com",
projectId: "solana-nft-programs-events",
storageBucket: "solana-nft-programs-events.appspot.com",
messagingSenderId: "453139651235",
appId: "1:453139651235:web:67443d5b218b600e7f3d16",
measurementId: "G-R9SVMD5CRT",
Expand Down
30 changes: 15 additions & 15 deletions api/common/tokenData.ts
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
/* eslint-disable no-empty */
import type { CertificateData } from "@cardinal/certificates";
import type { CertificateData } from "@solana-nft-programs/certificates";
import {
CERTIFICATE_IDL,
CERTIFICATE_PROGRAM_ID,
certificateIdForMint,
} from "@cardinal/certificates";
import { getBatchedMultipleAccounts } from "@cardinal/common";
import type { AccountData } from "@cardinal/token-manager";
} from "@solana-nft-programs/certificates";
import { getBatchedMultipleAccounts } from "@solana-nft-programs/common";
import type { AccountData } from "@solana-nft-programs/token-manager";
import {
timeInvalidator,
useInvalidator,
} from "@cardinal/token-manager/dist/cjs/programs";
import type { PaidClaimApproverData } from "@cardinal/token-manager/dist/cjs/programs/claimApprover";
} from "@solana-nft-programs/token-manager/dist/cjs/programs";
import type { PaidClaimApproverData } from "@solana-nft-programs/token-manager/dist/cjs/programs/claimApprover";
import {
CLAIM_APPROVER_ADDRESS,
CLAIM_APPROVER_IDL,
} from "@cardinal/token-manager/dist/cjs/programs/claimApprover";
import type { TimeInvalidatorData } from "@cardinal/token-manager/dist/cjs/programs/timeInvalidator";
} from "@solana-nft-programs/token-manager/dist/cjs/programs/claimApprover";
import type { TimeInvalidatorData } from "@solana-nft-programs/token-manager/dist/cjs/programs/timeInvalidator";
import {
TIME_INVALIDATOR_ADDRESS,
TIME_INVALIDATOR_IDL,
} from "@cardinal/token-manager/dist/cjs/programs/timeInvalidator";
import type { TokenManagerData } from "@cardinal/token-manager/dist/cjs/programs/tokenManager";
} from "@solana-nft-programs/token-manager/dist/cjs/programs/timeInvalidator";
import type { TokenManagerData } from "@solana-nft-programs/token-manager/dist/cjs/programs/tokenManager";
import {
TOKEN_MANAGER_ADDRESS,
TOKEN_MANAGER_IDL,
} from "@cardinal/token-manager/dist/cjs/programs/tokenManager";
import { findTokenManagerAddress } from "@cardinal/token-manager/dist/cjs/programs/tokenManager/pda";
import type { UseInvalidatorData } from "@cardinal/token-manager/dist/cjs/programs/useInvalidator";
} from "@solana-nft-programs/token-manager/dist/cjs/programs/tokenManager";
import { findTokenManagerAddress } from "@solana-nft-programs/token-manager/dist/cjs/programs/tokenManager/pda";
import type { UseInvalidatorData } from "@solana-nft-programs/token-manager/dist/cjs/programs/useInvalidator";
import {
USE_INVALIDATOR_ADDRESS,
USE_INVALIDATOR_IDL,
} from "@cardinal/token-manager/dist/cjs/programs/useInvalidator";
} from "@solana-nft-programs/token-manager/dist/cjs/programs/useInvalidator";
import * as metaplex from "@metaplex-foundation/mpl-token-metadata";
import {
MasterEditionV1Data,
Expand Down Expand Up @@ -290,7 +290,7 @@ export async function getTokenData(
if (
metaplexData &&
getMetadata &&
!metaplexData.parsed.data.uri.includes("cardinal")
!metaplexData.parsed.data.uri.includes("host")
) {
try {
const uri = metaplexData.parsed.data.uri;
Expand Down
2 changes: 1 addition & 1 deletion api/img-generator/event-ticket-image.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import fetch from "node-fetch";
import type { TokenData } from "../common/tokenData";

export const getTicketImageURL = (ticketId: string) => {
return `https://firebasestorage.googleapis.com/v0/b/cardinal-events.appspot.com/o/tickets%2F${ticketId}%2Fimage.png?alt=media`;
return `https://firebasestorage.googleapis.com/v0/b/solana-nft-programs-events.appspot.com/o/tickets%2F${ticketId}%2Fimage.png?alt=media`;
};

export async function getTicketImage(tokenData: TokenData): Promise<Buffer> {
Expand Down
4 changes: 2 additions & 2 deletions api/img-generator/img-utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { TokenManagerState } from "@cardinal/token-manager/dist/cjs/programs/tokenManager";
import { TokenManagerState } from "@solana-nft-programs/token-manager/dist/cjs/programs/tokenManager";
import * as canvas from "canvas";

const COLOR_RED = "rgba(200, 0, 0, 1)";
Expand Down Expand Up @@ -119,7 +119,7 @@ export const drawLogo = async (
const padding = paddingOverride ?? 0.05 * imageCanvas.width;
const logoCtx = imageCanvas.getContext("2d");
const logo = await canvas.loadImage(
__dirname.concat("/assets/cardinal-crosshair.png")
__dirname.concat("/assets/solana-nft-programs-crosshair.png")
);
logoCtx.drawImage(
logo,
Expand Down
9 changes: 3 additions & 6 deletions api/img-generator/jambo-image.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as questPool from "@cardinal/quest-pool";
import * as stakePool from "@cardinal/stake-pool";
import { getLevelNumber } from "@cardinal/stake-pool";
import * as questPool from "@solana-nft-programs/quest-pool";
import * as stakePool from "@solana-nft-programs/stake-pool";
import { getLevelNumber } from "@solana-nft-programs/stake-pool";
import { BN } from "@project-serum/anchor";
import * as web3 from "@solana/web3.js";
import * as canvas from "canvas";
Expand Down Expand Up @@ -74,9 +74,6 @@ export async function getJamboImage(
overlayCtx.fillRect(0, 0, WIDTH, HEIGHT);
// // logo
// const logoCtx = imageCanvas.getContext("2d");
// const logo = await canvas.loadImage(
// __dirname.concat("/assets/cardinal-crosshair.png")
// );
// logoCtx.drawImage(
// logo,
// HEIGHT - PADDING / 1.5 - HEIGHT * 0.16,
Expand Down
2 changes: 1 addition & 1 deletion api/img-generator/namespace-image.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { breakIdentity, formatName } from "@cardinal/namespaces";
import { breakIdentity, formatName } from "@solana-nft-programs/namespaces";
import * as canvas from "canvas";

import type { TokenData } from "../common/tokenData";
Expand Down
2 changes: 1 addition & 1 deletion api/metadata-generator/attributes.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
InvalidationType,
TokenManagerState,
} from "@cardinal/token-manager/dist/cjs/programs/tokenManager";
} from "@solana-nft-programs/token-manager/dist/cjs/programs/tokenManager";

import type { TokenData } from "../common/tokenData";

Expand Down
6 changes: 3 additions & 3 deletions api/metadata-generator/default.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { capitalizeFirstLetter } from "@cardinal/common";
import { capitalizeFirstLetter } from "@solana-nft-programs/common";

import type { NFTMetadata } from "./generator";

Expand All @@ -9,13 +9,13 @@ export const getDefaultMetadata = (
nameParam: string,
cluster: string
): NFTMetadata => {
const imageUrl = `https://nft.cardinal.so/img/${mintId}${
const imageUrl = `https://nft.host.so/img/${mintId}${
nameParam ? `?name=${encodeURIComponent(nameParam)}` : ""
}${cluster ? `${nameParam ? "&" : "?"}cluster=${cluster}` : ""}`;
return {
name: fullName,
symbol: "NAME",
description: `This is a Cardinal-powered NFT representing your ${namespace} identity`,
description: `This is a NFT representing your ${namespace} identity`,
seller_fee_basis_points: 0,
attributes: [],
collection: {
Expand Down
2 changes: 1 addition & 1 deletion api/metadata-generator/event-ticket-metadata.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export const getTicketMetadataLink = (ticketId: string) => {
return `https://firebasestorage.googleapis.com/v0/b/cardinal-events.appspot.com/o/tickets%2F${ticketId}%2Fmetadata.json?alt=media`;
return `https://firebasestorage.googleapis.com/v0/b/solana-nft-programs-events.appspot.com/o/tickets%2F${ticketId}%2Fmetadata.json?alt=media`;
};
6 changes: 3 additions & 3 deletions api/metadata-generator/expired.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import type { NFTMetadata } from "./generator";

const burnURL = (cluster: string) => {
if (cluster === "devnet") {
return "https://dev.cardinal.so/burn";
return "https://dev.host.so/burn";
}
return "https://main.cardinal.so/burn";
return "https://main.host.so/burn";
};

export const getExpiredMetadata = (cluster: string): NFTMetadata => {
const imageUrl = `https://api.cardinal.so/img/?text=EXPIRED`;
const imageUrl = `https://api.host.so/img/?text=EXPIRED`;
return {
name: "EXPIRED",
symbol: "RCP",
Expand Down
Loading

0 comments on commit 1b85dce

Please sign in to comment.