├── .gitignore ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── add_airdropped_badge.yml │ ├── add_permissionless_badge.yml │ └── add_backend-authorized_badge.yml └── workflows │ ├── validate.yml │ └── issue-to-pr.yml ├── .vscode └── settings.json ├── README.md ├── scripts ├── util.mjs ├── addBadge.mjs ├── labelBadge.mjs └── parseBadge.mjs ├── package.json ├── scroll.badgelist.backup.json ├── scroll.badgelist.sepolia.json ├── scroll.badgelist.mainnet.json ├── yarn.lock └── scroll.badgelist.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "prettier.singleQuote": false, 3 | "prettier.printWidth": 80 4 | } 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Please submit a badge through https://scroll.io/canvas/listing. 2 | 3 | This repo is deprecated. 4 | -------------------------------------------------------------------------------- /scripts/util.mjs: -------------------------------------------------------------------------------- 1 | import { readFile } from "fs/promises"; 2 | 3 | export const generatePath = (path) => { 4 | return new URL(path, import.meta.url); 5 | }; 6 | 7 | export const readJson = (path) => { 8 | return readFile(generatePath(path)).then((res) => JSON.parse(res)); 9 | }; 10 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@scroll/canvas-badges", 3 | "author": "scroll", 4 | "description": "Mintable badges on the website", 5 | "version": "1.0.0", 6 | "engines": { 7 | "node": ">=10" 8 | }, 9 | "dependencies": { 10 | "@actions/core": "^1.10.0", 11 | "@actions/github": "^6.0.0", 12 | "viem": "^2.13.6" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /scripts/addBadge.mjs: -------------------------------------------------------------------------------- 1 | import { writeFile } from "fs/promises"; 2 | import { readJson, generatePath } from "./util.mjs"; 3 | 4 | (async () => { 5 | try { 6 | const badge = JSON.parse(process.env.NEW_BADGE); 7 | const badgeList = await readJson("../scroll.badgelist.json"); 8 | 9 | badgeList.badges.push(badge); 10 | badgeList.timestamp = new Date().toISOString(); 11 | const badgeListStr = JSON.stringify(badgeList, null, 2); 12 | 13 | await writeFile(generatePath("../scroll.badgelist.json"), badgeListStr); 14 | process.exit(0); 15 | } catch (e) { 16 | console.error(e.message); 17 | process.exit(1); 18 | } 19 | })(); 20 | -------------------------------------------------------------------------------- /scroll.badgelist.backup.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Scroller Agent Badge", 4 | "image": "https://kioskmeta.s3.ap-southeast-1.amazonaws.com/scroller-badge-bridged.png", 5 | "description": "Earn this badge by bridging with your Scroller NFT from ETH Mainnet to Scroll.", 6 | "attesterProxy": "0x492815d7C37c5310C86A7E66De20d6A1Ca361990", 7 | "badgeContract": "0xBbA25F2539af23E7405E58F935de388A627120c6", 8 | "issuer": { 9 | "name": "Scroller NFT", 10 | "logo": "https://scroll-eco-list.netlify.app/logos/Scroller NFT.jpg", 11 | "origin": "https://www.scrollernft.xyz" 12 | }, 13 | "baseUrl": "https://vwb06c8e7h.execute-api.us-east-1.amazonaws.com/dev", 14 | "native": false 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /scripts/labelBadge.mjs: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import * as github from "@actions/github"; 3 | 4 | (async () => { 5 | try { 6 | const labels = github.context.payload.issue.labels.map( 7 | (label) => label.name 8 | ); 9 | let type; 10 | if (labels.includes("Airdropped")) { 11 | type = "airdropped"; 12 | } else if (labels.includes("Backend-authorized")) { 13 | type = "backend-authorized"; 14 | } else if (labels.includes("Permissionless")) { 15 | type = "permissionless"; 16 | } else { 17 | console.error( 18 | "The badge type must be one of the following: Airdropped, Backend-authorized, or Permissionless." 19 | ); 20 | process.exit(1); 21 | } 22 | core.setOutput("type", type); 23 | process.exit(0); 24 | } catch (e) { 25 | console.error(e.message); 26 | process.exit(1); 27 | } 28 | })(); 29 | -------------------------------------------------------------------------------- /.github/workflows/validate.yml: -------------------------------------------------------------------------------- 1 | # issue-to-pr will not trigger this workflow 2 | name: Validate TokenList 3 | 4 | on: 5 | push: 6 | paths: 7 | - scroll.tokenlist.json 8 | pull_request: 9 | paths: 10 | - scroll.tokenlist.json 11 | 12 | jobs: 13 | validate: 14 | name: Validate TokenList 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | with: 20 | fetch-depth: 0 21 | 22 | - name: Use Node.js 16.x 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: 16.x 26 | 27 | - name: Install dependencies 28 | run: yarn 29 | 30 | - name: Run validate script 31 | run: node scripts/validateJson.mjs 32 | 33 | - name: Show Token List 34 | if: success() && github.event.type == 'PullRequestEvent' 35 | uses: thollander/actions-comment-pull-request@v2 36 | with: 37 | message: | 38 | :tada: [Click here](https://tokenlists.org/token-list?url=https://raw.githubusercontent.com/scroll-tech/token-list/${{ github.head_ref }}/scroll.tokenlist.json) to preview token list 39 | comment_tag: tokenListUrl 40 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/add_airdropped_badge.yml: -------------------------------------------------------------------------------- 1 | name: "Add a Airdropped badge" 2 | description: "Badges can also be issues with no user interaction. To do this, the issuer uses EAS.attest or EAS.multiAttest." 3 | title: "[Badge]: " 4 | labels: ["Airdropped"] 5 | body: 6 | - type: dropdown 7 | id: badgeCategory 8 | attributes: 9 | label: Badge Category 10 | options: 11 | - Status 12 | - Identity 13 | - Achievement 14 | default: 0 15 | validations: 16 | required: true 17 | - type: input 18 | id: badgeContract 19 | attributes: 20 | label: Badge Contract Address 21 | description: Address of badge contranct deployed on Scroll. 22 | placeholder: "0xB1Dbd079c62d181926E5A54932Bb1b15F760e8A0" 23 | validations: 24 | required: true 25 | - type: input 26 | id: baseUrl 27 | attributes: 28 | label: BaseURL of Check API 29 | description: "like {{baseURL}}/check, refer to [Badge APIs](https://scrollzkp.notion.site/Badge-APIs-95890d7ca14944e2a6d34835ceb6b914)" 30 | validations: 31 | required: true 32 | - type: input 33 | id: issuerName 34 | attributes: 35 | label: Issuer Name 36 | description: Name of badge issuer. As same as the one listed on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 37 | placeholder: "Scroll" 38 | validations: 39 | required: true 40 | - type: input 41 | id: issuerURL 42 | attributes: 43 | label: Issuer URL 44 | description: URL of the badge promotional page, If left blank, it defaults to the issuer’s website on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 45 | placeholder: "https://scroll.io" 46 | validations: 47 | required: false 48 | - type: input 49 | id: communityURL 50 | attributes: 51 | label: Community URL 52 | description: If the user is unable to mint this badge, they can request help through this URL. 53 | placeholder: "https://discord.gg/B6sU3S7c" 54 | validations: 55 | required: true 56 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/add_permissionless_badge.yml: -------------------------------------------------------------------------------- 1 | name: "Add a Permissionless badge" 2 | description: "The user attests to themselves using EAS.attest. The badge contract ensures that the issuer is authorized." 3 | title: "[Badge]: " 4 | labels: ["Permissionless"] 5 | body: 6 | - type: dropdown 7 | id: badgeCategory 8 | attributes: 9 | label: Badge Category 10 | options: 11 | - Status 12 | - Identity 13 | - Achievement 14 | default: 0 15 | validations: 16 | required: true 17 | - type: input 18 | id: badgeContract 19 | attributes: 20 | label: Badge Contract Address 21 | description: Address of badge contranct deployed on Scroll. 22 | placeholder: "0xB1Dbd079c62d181926E5A54932Bb1b15F760e8A0" 23 | validations: 24 | required: true 25 | - type: dropdown 26 | id: eligibilityCheck 27 | attributes: 28 | label: Enable isEligible 29 | description: "Does the badge contract inherit from [ScrollBadgeEligibilityCheck](https://github.com/scroll-tech/canvas-contracts/blob/master/src/badge/examples/ScrollBadgePermissionless.sol)? Note: **No** means everyone is eligible to mint the badge." 30 | options: 31 | - "Yes" 32 | - "No" 33 | default: 0 34 | validations: 35 | required: true 36 | - type: input 37 | id: issuerName 38 | attributes: 39 | label: Issuer Name 40 | description: Name of badge issuer. As same as the one listed on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 41 | placeholder: "Scroll" 42 | validations: 43 | required: true 44 | - type: input 45 | id: issuerURL 46 | attributes: 47 | label: Issuer URL 48 | description: URL of the badge promotional page, If left blank, it defaults to the issuer’s website on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 49 | placeholder: "https://scroll.io" 50 | validations: 51 | required: false 52 | - type: input 53 | id: communityURL 54 | attributes: 55 | label: Community URL 56 | description: If the user is unable to mint this badge, they can request help through this URL. 57 | placeholder: "https://discord.gg/B6sU3S7c" 58 | validations: 59 | required: true 60 | -------------------------------------------------------------------------------- /.github/workflows/issue-to-pr.yml: -------------------------------------------------------------------------------- 1 | name: Issue To Pr 2 | 3 | on: 4 | issues: 5 | types: 6 | - opened 7 | - labeled 8 | 9 | jobs: 10 | issue-to-pr: 11 | name: Issue To Pr 12 | runs-on: ubuntu-latest 13 | outputs: 14 | branch-name: new-badge/${{ steps.issue-parser.outputs.issueparser_symbol }} 15 | pr-number: ${{ steps.create-pr.outputs.pull-request-number }} 16 | steps: 17 | - uses: actions/checkout@v4 18 | with: 19 | fetch-depth: 0 20 | 21 | - name: Use Node.js 20.x 22 | uses: actions/setup-node@v4 23 | with: 24 | node-version: 20.x 25 | 26 | - name: Install dependencies 27 | run: yarn 28 | 29 | - name: Label Badge 30 | id: label-badge 31 | run: node scripts/labelBadge.mjs 32 | 33 | - name: Parse Issue Body 34 | uses: stefanbuck/github-issue-praser@v3 35 | id: issue-parser 36 | with: 37 | template-path: .github/ISSUE_TEMPLATE/add_${{ steps.label-badge.outputs.type }}_badge.yml 38 | 39 | - name: Parse Badge 40 | id: parse-badge 41 | run: node scripts/parseBadge.mjs 42 | env: 43 | RESOLVED_BADGE_STR: ${{ steps.issue-parser.outputs.jsonString }} 44 | BADGE_TYPE: ${{ steps.label-badge.outputs.type }} 45 | 46 | - name: Add Badge 47 | id: add-badge 48 | run: node scripts/addBadge.mjs 49 | env: 50 | NEW_BADGE: ${{ steps.parse-badge.outputs.new-badge }} 51 | 52 | - name: Create Pull Request 53 | id: create-pr 54 | uses: peter-evans/create-pull-request@v6 55 | with: 56 | title: "[New Badge]: ${{ steps.parse-badge.outputs.new-badge_name }} issued by ${{ steps.parse-badge.outputs.new-badge_issuerName }}" 57 | body: "Refer Issue: #${{ github.event.issue.number }}" 58 | commit-message: add ${{ steps.parse-badge.outputs.new-badge_name }} 59 | base: main 60 | branch: ${{ steps.parse-badge.outputs.new-badge_issuerName }}/${{ steps.parse-badge.outputs.new-badge_name }} 61 | delete-branch: true 62 | add-paths: scroll.badgelist.json 63 | labels: | 64 | new 65 | ${{ steps.label-badge.outputs.type }} 66 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/add_backend-authorized_badge.yml: -------------------------------------------------------------------------------- 1 | name: "Add a Backend-authorized badge" 2 | description: "A centralized backend implements some off-chain eligibility check. If the user is authorized to mint, the backend issues a signed permit." 3 | title: "[Badge]: " 4 | labels: ["Backend-authorized"] 5 | body: 6 | - type: dropdown 7 | id: badgeCategory 8 | attributes: 9 | label: Badge Category 10 | options: 11 | - Status 12 | - Identity 13 | - Achievement 14 | default: 0 15 | validations: 16 | required: true 17 | - type: input 18 | id: badgeContract 19 | attributes: 20 | label: Badge Contract Address 21 | description: Address of badge contranct deployed on Scroll. 22 | placeholder: "0xB1Dbd079c62d181926E5A54932Bb1b15F760e8A0" 23 | validations: 24 | required: true 25 | - type: input 26 | id: attesterProxy 27 | attributes: 28 | label: Attester Proxy Address 29 | description: Address of proxy attestation contract deployed on Scroll 30 | placeholder: "0xC47300428b6AD2c7D03BB76D05A176058b47E6B0" 31 | validations: 32 | required: true 33 | - type: input 34 | id: baseUrl 35 | attributes: 36 | label: BaseURL of Check/Claim API 37 | description: "like {{baseURL}}/check and {{baseURL}}/claim, refer to [Badge APIs](https://scrollzkp.notion.site/Badge-APIs-95890d7ca14944e2a6d34835ceb6b914)" 38 | validations: 39 | required: true 40 | - type: input 41 | id: issuerName 42 | attributes: 43 | label: Issuer Name 44 | description: Name of badge issuer. As same as the one listed on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 45 | placeholder: "Scroll" 46 | validations: 47 | required: true 48 | - type: input 49 | id: issuerURL 50 | attributes: 51 | label: Issuer URL 52 | description: URL of the badge promotional page, If left blank, it defaults to the issuer’s website on [Scroll Ecosystem](https://scroll.io/ecosystem#protocols). 53 | placeholder: "https://scroll.io" 54 | validations: 55 | required: false 56 | - type: input 57 | id: communityURL 58 | attributes: 59 | label: Community URL 60 | description: If the user is unable to mint this badge, they can request help through this URL. 61 | placeholder: "https://discord.gg/B6sU3S7c" 62 | validations: 63 | required: true 64 | -------------------------------------------------------------------------------- /scripts/parseBadge.mjs: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import { 3 | createPublicClient, 4 | http, 5 | decodeFunctionData, 6 | decodeErrorResult, 7 | } from "viem"; 8 | import { scroll } from "viem/chains"; 9 | 10 | const Badge_ABI = [ 11 | { 12 | inputs: [ 13 | { 14 | internalType: "bytes32", 15 | name: "uid", 16 | type: "bytes32", 17 | }, 18 | ], 19 | name: "badgeTokenURI", 20 | outputs: [ 21 | { 22 | internalType: "string", 23 | name: "", 24 | type: "string", 25 | }, 26 | ], 27 | stateMutability: "view", 28 | type: "function", 29 | }, 30 | ]; 31 | 32 | (async () => { 33 | try { 34 | const badge = JSON.parse(process.env.RESOLVED_BADGE_STR); 35 | const type = process.env.BADGE_TYPE; 36 | let { 37 | badgeCategory, 38 | badgeContract, 39 | attesterProxy, 40 | baseUrl, 41 | issuerName, 42 | issuerURL, 43 | eligibilityCheck, 44 | communityURL, 45 | } = badge; 46 | badgeContract = badgeContract.trim(); 47 | issuerName = issuerName.trim(); 48 | issuerURL = issuerURL.trim(); 49 | communityURL = communityURL.trim(); 50 | 51 | const publicClient = createPublicClient({ 52 | chain: scroll, 53 | transport: http(), 54 | }); 55 | const metadataURL = await publicClient.readContract({ 56 | address: badgeContract, 57 | abi: Badge_ABI, 58 | functionName: "badgeTokenURI", 59 | args: [ 60 | "0x0000000000000000000000000000000000000000000000000000000000000000", 61 | ], 62 | }); 63 | const accessableURL = metadataURL.replace( 64 | /^ipfs:\/\/(.*)/, 65 | "https://ipfs.io/ipfs/$1" 66 | ); 67 | let { name, image, description } = await fetch(accessableURL).then((res) => 68 | res.json() 69 | ); 70 | 71 | if (!name || !image || !description) { 72 | console.error( 73 | "Please ensure that the JSON returned by badgeTokenURI includes `name`, `image`, `description`." 74 | ); 75 | process.exit(1); 76 | } 77 | 78 | image = image.replace(/^ipfs:\/\/(.*)/, "https://ipfs.io/ipfs/$1"); 79 | 80 | const { data } = await fetch( 81 | `https://ecosystem-list-api.vercel.app/api/query?name=${issuerName}` 82 | ).then((res) => res.json()); 83 | if (!data.length) { 84 | console.error("Unable to find the relevant data in the ecosystem list!"); 85 | process.exit(1); 86 | } 87 | const [{ name: issuerFullName, ext, website }] = data; 88 | const issuerLogo = `https://scroll-eco-list.netlify.app/logos/${issuerFullName}${ext}`; 89 | 90 | const issuer = { 91 | name: issuerFullName, 92 | logo: issuerLogo, 93 | origin: issuerURL || website, 94 | }; 95 | let newBadge = { 96 | name, 97 | image, 98 | description, 99 | badgeContract, 100 | category: badgeCategory, 101 | issuer: { 102 | name: issuerFullName, 103 | logo: issuerLogo, 104 | origin: issuerURL || website, 105 | communityURL, 106 | }, 107 | native: false, 108 | }; 109 | 110 | let extraProperties = {}; 111 | 112 | if (type === "airdropped") { 113 | baseUrl = baseUrl.trim().replace(/(.*)\/$/g, "$1"); 114 | 115 | extraProperties = { 116 | airdrop: true, 117 | baseUrl, 118 | }; 119 | } else if (type === "backend-authorized") { 120 | attesterProxy = attesterProxy.trim(); 121 | baseUrl = baseUrl.trim().replace(/(.*)\/$/g, "$1"); 122 | 123 | extraProperties = { 124 | attesterProxy, 125 | baseUrl, 126 | }; 127 | } else if (type === "permissionless") { 128 | eligibilityCheck = eligibilityCheck === "Yes" ? true : false; 129 | 130 | extraProperties = { 131 | eligibilityCheck, 132 | }; 133 | } 134 | 135 | newBadge = { ...newBadge, ...extraProperties }; 136 | 137 | core.setOutput("new-badge", JSON.stringify(newBadge, null, 2)); 138 | core.setOutput("new-badge_name", name.split(" ").join("_")); 139 | core.setOutput("new-badge_issuerName", issuerFullName.split(" ").join("_")); 140 | process.exit(0); 141 | } catch (e) { 142 | console.error(e.message); 143 | process.exit(1); 144 | } 145 | })(); 146 | -------------------------------------------------------------------------------- /scroll.badgelist.sepolia.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Scroll Badges", 3 | "timestamp": "2024-06-06T02:12:55.046Z", 4 | "badges": [ 5 | { 6 | "name": "Swapoor", 7 | "badgeContract": "0x3abe5377E347D5E7d45bd6E2E506F753B9786cE9", 8 | "attesterProxy": "0x9F54d1FFc14C61b7EC170F6cA53434855D3737AA", 9 | "description": "Swapooor! You have made a swap on Ambient Finance for over $500. Art by: @ShizzyAizawa", 10 | "image": "https://ambient.finance/scroll-badge/1.png", 11 | "issuer": { 12 | "origin": "https://scroll.ambient.finance/", 13 | "name": "Ambient Finance", 14 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 15 | }, 16 | "baseUrl": "https://ambient-scroll-badge-sepolia.liquidity.tools/api", 17 | "native": false 18 | }, 19 | { 20 | "name": "Providoor", 21 | "badgeContract": "0x7D61d353d2b8E8BD66c069eaEa088fDB006ADf5c", 22 | "attesterProxy": "0x9F54d1FFc14C61b7EC170F6cA53434855D3737AA", 23 | "description": "Providoor! You have minted an LP position on Ambient Finance valued over $1000. Art by: @ShizzyAizawa", 24 | "image": "https://ambient.finance/scroll-badge/2.png", 25 | "issuer": { 26 | "origin": "https://scroll.ambient.finance/", 27 | "name": "Ambient Finance", 28 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 29 | }, 30 | "baseUrl": "https://ambient-scroll-badge-sepolia.liquidity.tools/api", 31 | "native": false 32 | }, 33 | { 34 | "name": "Filloor", 35 | "badgeContract": "0x184775970b6736d9be4B9e9A3E0b1D03815d5aC1", 36 | "attesterProxy": "0x9F54d1FFc14C61b7EC170F6cA53434855D3737AA", 37 | "description": "Filloor! You have filled a limit on Ambient Finance valued over $500. Art by: @ShizzyAizawa", 38 | "image": "https://ambient.finance/scroll-badge/3.png", 39 | "issuer": { 40 | "origin": "https://scroll.ambient.finance/", 41 | "name": "Ambient Finance", 42 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 43 | }, 44 | "baseUrl": "https://ambient-scroll-badge-sepolia.liquidity.tools/api", 45 | "native": false 46 | }, 47 | { 48 | "name": "Yeet", 49 | "badgeContract": "0x3B916928bb6AF9215AdbCeCf9ced50e6Cb3553d0", 50 | "attesterProxy": "0x9F54d1FFc14C61b7EC170F6cA53434855D3737AA", 51 | "description": "Yeet! You are providing a modest amount of liquidity in a single position. You will be rewarded accordingly to the size! For now, enjoy having a differently colored croc. Art by: @ShizzyAizawa", 52 | "image": "https://ambient.finance/scroll-badge/4.png", 53 | "issuer": { 54 | "origin": "https://scroll.ambient.finance/", 55 | "name": "Ambient Finance", 56 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 57 | }, 58 | "baseUrl": "https://ambient-scroll-badge-sepolia.liquidity.tools/api", 59 | "native": false 60 | }, 61 | { 62 | "name": "Zebra", 63 | "badgeContract": "0x619a0A19203697f36C4092C757485734Ec23b2eB", 64 | "attesterProxy": "0xD528308D3f0c6CfF15C6D25193d77aFB123ABe82", 65 | "description": "Users who participate in Scroll Canvas and complete tasks will receive Zebra's 'zebra' badge. Users with this badge will enjoy Zebra's early benefits in the future.", 66 | "image": "https://app.zebra.xyz/images/badge.png", 67 | "issuer": { 68 | "origin": "https://zebra.xyz/", 69 | "name": "Zebra", 70 | "logo": "https://scroll-eco-list.netlify.app/logos/Zebra.png" 71 | }, 72 | "baseUrl": "https://zktrade.net/api/badge", 73 | "native": false 74 | }, 75 | { 76 | "name": "Scroll NFT", 77 | "badgeContract": "0xbD8fee984d58381daE28346eF67EDa9e7A664976", 78 | "attesterProxy": "0x7C9e7D549Ffbc038F9C22c2097F9aeE102369A1a", 79 | "description": "NFT Description", 80 | "image": "https://beta.flock.io/static/images/scrollNFT/chat.png", 81 | "issuer": { 82 | "origin": "https://www.flock.io/#/", 83 | "name": "FLock.io", 84 | "logo": "https://scroll-eco-list.netlify.app/logos/Flock.io.jpg" 85 | }, 86 | "baseUrl": "https://interface-git-development-flock-io.vercel.app/api/scrollNFT", 87 | "native": false 88 | }, 89 | { 90 | "name": "Contribution NFT", 91 | "badgeContract": "0x6e6518E7E83F9DfB4AC921171BCF19eabeF8105F", 92 | "attesterProxy": "0x4e31a76f8dFbf300E94D7381Be20A4f0fB5e370A", 93 | "description": "NFT Description", 94 | "image": "https://beta.flock.io/static/images/scrollNFT/contribute.png", 95 | "issuer": { 96 | "origin": "https://www.flock.io/#/", 97 | "name": "FLock.io", 98 | "logo": "https://scroll-eco-list.netlify.app/logos/Flock.io.jpg" 99 | }, 100 | "baseUrl": "https://interface-git-development-flock-io.vercel.app/api/scrollNFT", 101 | "native": false 102 | } 103 | ] 104 | } 105 | -------------------------------------------------------------------------------- /scroll.badgelist.mainnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Scroll Badges", 3 | "timestamp": "2024-06-06T02:12:55.046Z", 4 | "badges": [ 5 | { 6 | "name": "Swapoor", 7 | "badgeContract": "0xDcB439703F40430dE360dfeEd51E4261D1fAa310", 8 | "attesterProxy": "0x83f26d1c451DFCFE2e16B479981c6fA2BCCe053F", 9 | "description": "Swapooor! You have made a swap on Ambient Finance for over $500. Art by: @ShizzyAizawa", 10 | "image": "https://ambient.finance/scroll-badge/1.png", 11 | "issuer": { 12 | "origin": "https://scroll.ambient.finance/", 13 | "name": "Ambient Finance", 14 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 15 | }, 16 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 17 | "native": false 18 | }, 19 | { 20 | "name": "Providoor", 21 | "badgeContract": "0x9289079DF3C056A5feFD0F07AD610C1D889Ea316", 22 | "attesterProxy": "0x83f26d1c451DFCFE2e16B479981c6fA2BCCe053F", 23 | "description": "Providoor! You have minted an LP position on Ambient Finance valued over $1000. Art by: @ShizzyAizawa", 24 | "image": "https://ambient.finance/scroll-badge/2.png", 25 | "issuer": { 26 | "origin": "https://scroll.ambient.finance/", 27 | "name": "Ambient Finance", 28 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 29 | }, 30 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 31 | "native": false 32 | }, 33 | { 34 | "name": "Filloor", 35 | "badgeContract": "0x7aFcb77B33F8CAb87Bcd16bA8E94b79A2146a39E", 36 | "attesterProxy": "0x83f26d1c451DFCFE2e16B479981c6fA2BCCe053F", 37 | "description": "Filloor! You have filled a limit on Ambient Finance valued over $500. Art by: @ShizzyAizawa", 38 | "image": "https://ambient.finance/scroll-badge/3.png", 39 | "issuer": { 40 | "origin": "https://scroll.ambient.finance/", 41 | "name": "Ambient Finance", 42 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 43 | }, 44 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 45 | "native": false 46 | }, 47 | { 48 | "name": "Yeet", 49 | "badgeContract": "0x38129F0582A984F57f41F29eD183c8Ea5e798796", 50 | "attesterProxy": "0x83f26d1c451DFCFE2e16B479981c6fA2BCCe053F", 51 | "description": "Yeet! You are providing a modest amount of liquidity in a single position. You will be rewarded accordingly to the size! For now, enjoy having a differently colored croc. Art by: @ShizzyAizawa", 52 | "image": "https://ambient.finance/scroll-badge/4.png", 53 | "issuer": { 54 | "origin": "https://scroll.ambient.finance/", 55 | "name": "Ambient Finance", 56 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient%20Finance.png" 57 | }, 58 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 59 | "native": false 60 | }, 61 | { 62 | "name": "Zebra", 63 | "badgeContract": "0xbAdc59EF32e33feEA29Ee7e35435da89A30e875d", 64 | "attesterProxy": "0x69D872fbBdb71CF3599A0Ee29D4115C3FC31745E", 65 | "description": "Users who participate in Scroll Canvas and complete tasks will receive Zebra's 'zebra' badge. Users with this badge will enjoy Zebra's early benefits in the future.", 66 | "image": "https://app.zebra.xyz/images/badge.png", 67 | "issuer": { 68 | "origin": "https://zebra.xyz/", 69 | "name": "Zebra", 70 | "logo": "https://scroll-eco-list.netlify.app/logos/Zebra.png" 71 | }, 72 | "baseUrl": "https://zebra.xyz/api/badge", 73 | "native": false 74 | }, 75 | { 76 | "name": "Scrolly Baby", 77 | "badgeContract": "0x89b27e836BF46275e6D87cD55461D34ABaade51A", 78 | "attesterProxy": "0x47a49cCfa1924D5b59cb400708199b6Ae8543D31", 79 | "description": "Bestowed upon all who enter the Scrollyverse, this badge signifies the start of your journey", 80 | "image": "https://cyan-passive-guan-475.mypinata.cloud/ipfs/QmY9rG94E1qpc5NPs1zFTM1hCCTmv9kiRvMoZjGyxCJ2ZE/0.png", 81 | "issuer": { 82 | "origin": "https://scrolly.xyz/", 83 | "name": "Scrolly", 84 | "logo": "https://scroll-eco-list.netlify.app/logos/Scrolly.jpg" 85 | }, 86 | "baseUrl": "https://api.scrolly.xyz/api/badge", 87 | "native": false 88 | }, 89 | { 90 | "name": "Pencil S Badge", 91 | "badgeContract": "0x06471896f95d349d750977c206974410abe971ed", 92 | "attesterProxy": "0x370d58d5c5db8dae58c28b1310174e8cb3eb4a77", 93 | "description": "Pencils S Badge is rewarded to users who actively participated in Pencils Protocol multi-seasons campaign, with staking more than 0.5 ETH equivalent assets into Scroll ecosystem", 94 | "image": "https://pencilsprotocol.io/nft/scroll/pencil/0.png", 95 | "issuer": { 96 | "origin": "https://pencilsprotocol.io/", 97 | "name": "Pencils Protocol", 98 | "logo": "https://scroll-eco-list.netlify.app/logos/Pencils%20Protocol.jpg" 99 | }, 100 | "baseUrl": "https://pencilsprotocol.io/api/scroll/canvas/badge/pencil", 101 | "native": false 102 | }, 103 | { 104 | "name": "Unique Humanity Score", 105 | "badgeContract": "0x71A848A38fFCcA5c7A431F2BB411Ab632Fa0c456", 106 | "attesterProxy": "0x39571bBD5a4c5d1a5184004c63F45FE426dB85Ea", 107 | "description": "This badge is for Scrollers who have a Passport score above 20, and have minted an onchain attestation to the Scroll network. Minting this badge informs everyone in the Scroll ecosystem that you’re a real human! Increase your onchain Humanity Score to upgrade your badge.", 108 | "image": "https://raw.githubusercontent.com/gitcoinco/passport/93889216df77f83470b948f5c8b3f48c3b0492b4/app/public/scrollBadgeImages/60%2B.png", 109 | "issuer": { 110 | "origin": "https://www.passport.xyz/", 111 | "name": "Gitcoin Passport", 112 | "logo": "https://pbs.twimg.com/profile_images/1696549595747057664/5mhzRBdk_400x400.jpg" 113 | }, 114 | "baseUrl": "https://passport-iam.gitcoin.co/scroll", 115 | "native": false 116 | } 117 | ] 118 | } 119 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@actions/core@^1.10.0": 6 | version "1.10.1" 7 | resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a" 8 | integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g== 9 | dependencies: 10 | "@actions/http-client" "^2.0.1" 11 | uuid "^8.3.2" 12 | 13 | "@actions/github@^6.0.0": 14 | version "6.0.0" 15 | resolved "https://registry.yarnpkg.com/@actions/github/-/github-6.0.0.tgz#65883433f9d81521b782a64cc1fd45eef2191ea7" 16 | integrity sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g== 17 | dependencies: 18 | "@actions/http-client" "^2.2.0" 19 | "@octokit/core" "^5.0.1" 20 | "@octokit/plugin-paginate-rest" "^9.0.0" 21 | "@octokit/plugin-rest-endpoint-methods" "^10.0.0" 22 | 23 | "@actions/http-client@^2.0.1", "@actions/http-client@^2.2.0": 24 | version "2.2.1" 25 | resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.1.tgz#ed3fe7a5a6d317ac1d39886b0bb999ded229bb38" 26 | integrity sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw== 27 | dependencies: 28 | tunnel "^0.0.6" 29 | undici "^5.25.4" 30 | 31 | "@adraffy/ens-normalize@1.10.0": 32 | version "1.10.0" 33 | resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" 34 | integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== 35 | 36 | "@fastify/busboy@^2.0.0": 37 | version "2.1.1" 38 | resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" 39 | integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== 40 | 41 | "@noble/curves@1.2.0", "@noble/curves@~1.2.0": 42 | version "1.2.0" 43 | resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" 44 | integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== 45 | dependencies: 46 | "@noble/hashes" "1.3.2" 47 | 48 | "@noble/hashes@1.3.2": 49 | version "1.3.2" 50 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" 51 | integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== 52 | 53 | "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2": 54 | version "1.3.3" 55 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" 56 | integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== 57 | 58 | "@octokit/auth-token@^4.0.0": 59 | version "4.0.0" 60 | resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" 61 | integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== 62 | 63 | "@octokit/core@^5.0.1": 64 | version "5.2.0" 65 | resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.0.tgz#ddbeaefc6b44a39834e1bb2e58a49a117672a7ea" 66 | integrity sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg== 67 | dependencies: 68 | "@octokit/auth-token" "^4.0.0" 69 | "@octokit/graphql" "^7.1.0" 70 | "@octokit/request" "^8.3.1" 71 | "@octokit/request-error" "^5.1.0" 72 | "@octokit/types" "^13.0.0" 73 | before-after-hook "^2.2.0" 74 | universal-user-agent "^6.0.0" 75 | 76 | "@octokit/endpoint@^9.0.1": 77 | version "9.0.5" 78 | resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.5.tgz#e6c0ee684e307614c02fc6ac12274c50da465c44" 79 | integrity sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw== 80 | dependencies: 81 | "@octokit/types" "^13.1.0" 82 | universal-user-agent "^6.0.0" 83 | 84 | "@octokit/graphql@^7.1.0": 85 | version "7.1.0" 86 | resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.0.tgz#9bc1c5de92f026648131f04101cab949eeffe4e0" 87 | integrity sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ== 88 | dependencies: 89 | "@octokit/request" "^8.3.0" 90 | "@octokit/types" "^13.0.0" 91 | universal-user-agent "^6.0.0" 92 | 93 | "@octokit/openapi-types@^20.0.0": 94 | version "20.0.0" 95 | resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-20.0.0.tgz#9ec2daa0090eeb865ee147636e0c00f73790c6e5" 96 | integrity sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA== 97 | 98 | "@octokit/openapi-types@^22.2.0": 99 | version "22.2.0" 100 | resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" 101 | integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== 102 | 103 | "@octokit/plugin-paginate-rest@^9.0.0": 104 | version "9.2.1" 105 | resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz#2e2a2f0f52c9a4b1da1a3aa17dabe3c459b9e401" 106 | integrity sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw== 107 | dependencies: 108 | "@octokit/types" "^12.6.0" 109 | 110 | "@octokit/plugin-rest-endpoint-methods@^10.0.0": 111 | version "10.4.1" 112 | resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz#41ba478a558b9f554793075b2e20cd2ef973be17" 113 | integrity sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg== 114 | dependencies: 115 | "@octokit/types" "^12.6.0" 116 | 117 | "@octokit/request-error@^5.1.0": 118 | version "5.1.0" 119 | resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.0.tgz#ee4138538d08c81a60be3f320cd71063064a3b30" 120 | integrity sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q== 121 | dependencies: 122 | "@octokit/types" "^13.1.0" 123 | deprecation "^2.0.0" 124 | once "^1.4.0" 125 | 126 | "@octokit/request@^8.3.0", "@octokit/request@^8.3.1": 127 | version "8.4.0" 128 | resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.0.tgz#7f4b7b1daa3d1f48c0977ad8fffa2c18adef8974" 129 | integrity sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw== 130 | dependencies: 131 | "@octokit/endpoint" "^9.0.1" 132 | "@octokit/request-error" "^5.1.0" 133 | "@octokit/types" "^13.1.0" 134 | universal-user-agent "^6.0.0" 135 | 136 | "@octokit/types@^12.6.0": 137 | version "12.6.0" 138 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-12.6.0.tgz#8100fb9eeedfe083aae66473bd97b15b62aedcb2" 139 | integrity sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw== 140 | dependencies: 141 | "@octokit/openapi-types" "^20.0.0" 142 | 143 | "@octokit/types@^13.0.0", "@octokit/types@^13.1.0": 144 | version "13.5.0" 145 | resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.5.0.tgz#4796e56b7b267ebc7c921dcec262b3d5bfb18883" 146 | integrity sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ== 147 | dependencies: 148 | "@octokit/openapi-types" "^22.2.0" 149 | 150 | "@scure/base@~1.1.0", "@scure/base@~1.1.2": 151 | version "1.1.6" 152 | resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" 153 | integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== 154 | 155 | "@scure/bip32@1.3.2": 156 | version "1.3.2" 157 | resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" 158 | integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA== 159 | dependencies: 160 | "@noble/curves" "~1.2.0" 161 | "@noble/hashes" "~1.3.2" 162 | "@scure/base" "~1.1.2" 163 | 164 | "@scure/bip39@1.2.1": 165 | version "1.2.1" 166 | resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" 167 | integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== 168 | dependencies: 169 | "@noble/hashes" "~1.3.0" 170 | "@scure/base" "~1.1.0" 171 | 172 | abitype@1.0.0: 173 | version "1.0.0" 174 | resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97" 175 | integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ== 176 | 177 | before-after-hook@^2.2.0: 178 | version "2.2.3" 179 | resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" 180 | integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== 181 | 182 | deprecation@^2.0.0: 183 | version "2.3.1" 184 | resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" 185 | integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== 186 | 187 | isows@1.0.4: 188 | version "1.0.4" 189 | resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061" 190 | integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ== 191 | 192 | once@^1.4.0: 193 | version "1.4.0" 194 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 195 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 196 | dependencies: 197 | wrappy "1" 198 | 199 | tunnel@^0.0.6: 200 | version "0.0.6" 201 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" 202 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 203 | 204 | undici@^5.25.4: 205 | version "5.28.4" 206 | resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" 207 | integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== 208 | dependencies: 209 | "@fastify/busboy" "^2.0.0" 210 | 211 | universal-user-agent@^6.0.0: 212 | version "6.0.1" 213 | resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" 214 | integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== 215 | 216 | uuid@^8.3.2: 217 | version "8.3.2" 218 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 219 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 220 | 221 | viem@^2.13.6: 222 | version "2.13.6" 223 | resolved "https://registry.yarnpkg.com/viem/-/viem-2.13.6.tgz#32d1dc3215627044972bb905db4adfcf674655f1" 224 | integrity sha512-BhvYhLrExC9P4AH9Gu/2A3VPUFkJT/ayH+A9anco2Ja/D0h3NStq+2uF4htcly1e68/U7IOrlCyX3Jz9zqeEJA== 225 | dependencies: 226 | "@adraffy/ens-normalize" "1.10.0" 227 | "@noble/curves" "1.2.0" 228 | "@noble/hashes" "1.3.2" 229 | "@scure/bip32" "1.3.2" 230 | "@scure/bip39" "1.2.1" 231 | abitype "1.0.0" 232 | isows "1.0.4" 233 | ws "8.13.0" 234 | 235 | wrappy@1: 236 | version "1.0.2" 237 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 238 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 239 | 240 | ws@8.13.0: 241 | version "8.13.0" 242 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" 243 | integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== 244 | -------------------------------------------------------------------------------- /scroll.badgelist.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Scroll Badges", 3 | "timestamp": "2024-08-08T03:41:28.422Z", 4 | "badges": [ 5 | { 6 | "name": "Ambient Swapooor", 7 | "image": "https://ambient.finance/scroll-badge/1.png", 8 | "description": "Swapooor badge is for users who have made one or more single swaps on Ambient for $500. (Art by @ShizzyAizawa)", 9 | "attesterProxy": "0xf61B5dAe16948F0f1ed9141634E4647bBaAa4A81", 10 | "badgeContract": "0xDaf958ec36dB494e82709a3AaB9FA6981EfC4Dad", 11 | "issuer": { 12 | "name": "Ambient Finance", 13 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient Finance.png", 14 | "origin": "https://ambient.finance/" 15 | }, 16 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 17 | "native": false 18 | }, 19 | { 20 | "name": "Ambient Providoor", 21 | "image": "https://ambient.finance/scroll-badge/2.png", 22 | "description": "Providoor badge is for users who have made one or more single LP positions on Ambient Finance valued over $1000. (Art by @ShizzyAizawa)", 23 | "attesterProxy": "0xf61B5dAe16948F0f1ed9141634E4647bBaAa4A81", 24 | "badgeContract": "0xC634b718618729df70331D79fcd6E889a547fbEB", 25 | "issuer": { 26 | "name": "Ambient Finance", 27 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient Finance.png", 28 | "origin": "https://ambient.finance/" 29 | }, 30 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 31 | "native": false 32 | }, 33 | { 34 | "name": "Ambient Filloor", 35 | "image": "https://ambient.finance/scroll-badge/3.png", 36 | "description": "Filloor badge is for users who have one or more filled limit orders on Ambient Finance valued over $500. (Art by @ShizzyAizawa)", 37 | "attesterProxy": "0xf61B5dAe16948F0f1ed9141634E4647bBaAa4A81", 38 | "badgeContract": "0x21C5E85eBCbd924BA633D4A7A5F2718f25C713D8", 39 | "issuer": { 40 | "name": "Ambient Finance", 41 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient Finance.png", 42 | "origin": "https://ambient.finance/" 43 | }, 44 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 45 | "native": false 46 | }, 47 | { 48 | "name": "Ambient Yeet", 49 | "image": "https://ambient.finance/scroll-badge/4.png", 50 | "description": "Yeet badge is for users who are providing a sizable amount of liquidity in a single position. You will be rewarded accordingly to the size, but for now, enjoy having a differently colored croc! (Art by @ShizzyAizawa)", 51 | "attesterProxy": "0xf61B5dAe16948F0f1ed9141634E4647bBaAa4A81", 52 | "badgeContract": "0x7bD1AEADCc59EedaF4775E4D3197Ce9a7031BD01", 53 | "issuer": { 54 | "name": "Ambient Finance", 55 | "logo": "https://scroll-eco-list.netlify.app/logos/Ambient Finance.png", 56 | "origin": "https://ambient.finance/" 57 | }, 58 | "baseUrl": "https://ambient-scroll-badge.liquidity.tools/api", 59 | "native": false 60 | }, 61 | { 62 | "name": "Zebra", 63 | "image": "https://app.zebra.xyz/images/badge.png", 64 | "description": "Users who participate in Scroll Canvas and complete tasks will receive Zebra's 'zebra' badge. Users with this badge will enjoy Zebra's early benefits in the future.", 65 | "attesterProxy": "0x35BcDcd5813a08f890163c166826856B47e7977F", 66 | "badgeContract": "0x09E14E520eec3583681Fe225a4B506743EC3cc78", 67 | "issuer": { 68 | "name": "Zebra", 69 | "logo": "https://scroll-eco-list.netlify.app/logos/Zebra.png", 70 | "origin": "https://app.zebra.xyz/" 71 | }, 72 | "baseUrl": "https://zebra.xyz/api/badge", 73 | "native": false 74 | }, 75 | { 76 | "name": "Unrevealed", 77 | "image": "https://ipfs.io/ipfs/QmY9rG94E1qpc5NPs1zFTM1hCCTmv9kiRvMoZjGyxCJ2ZE/0.png", 78 | "description": "Unrevealed scrolly badge.", 79 | "attesterProxy": "0x47a49cCfa1924D5b59cb400708199b6Ae8543D31", 80 | "badgeContract": "0x79b4f7492328D0Cc4ED0Ddaee08Cd42f0F36A4CC", 81 | "issuer": { 82 | "name": "Scrolly", 83 | "logo": "https://scroll-eco-list.netlify.app/logos/Scrolly.jpg", 84 | "origin": "https://hub.scrolly.xyz/" 85 | }, 86 | "baseUrl": "https://api.scrolly.xyz/api/badge", 87 | "native": false 88 | }, 89 | { 90 | "name": "Pencil S Badge", 91 | "image": "https://pencilsprotocol.io/nft/scroll/pencil/metadata-s-badge.png", 92 | "description": "Pencils S Badge is rewarded to users who actively participated in Pencils Protocol multi-seasons campaign, with staking more than 0.5 ETH equivalent assets into Scroll ecosystem", 93 | "attesterProxy": "0x43B643299110F99536aBE0ACA64c98BeD7360286", 94 | "badgeContract": "0x766e3f1EE86439DE0597F6e917F980A4e5d187A3", 95 | "issuer": { 96 | "name": "Pencils Protocol", 97 | "logo": "https://scroll-eco-list.netlify.app/logos/Pencils Protocol.jpg", 98 | "origin": "https://pencilsprotocol.io" 99 | }, 100 | "baseUrl": "https://pencilsprotocol.io/api/scroll/canvas/badge/pencil", 101 | "native": false 102 | }, 103 | { 104 | "name": "Pencil P Badge", 105 | "image": "https://pencilsprotocol.io/nft/scroll/pencil/metadata-p-badge.png", 106 | "description": "Pencils P Badge is rewarded to users who actively participated in Pencils Protocol multi-seasons campaign, with staking more than 0.1 ETH equivalent assets into Scroll ecosystem", 107 | "attesterProxy": "0xe657243DF50dbC60383f9504bE22f7288174095c", 108 | "badgeContract": "0x2d8E67c1427a1ebb9ddB5c4D38143140B0c19aC8", 109 | "issuer": { 110 | "name": "Pencils Protocol", 111 | "logo": "https://scroll-eco-list.netlify.app/logos/Pencils Protocol.jpg", 112 | "origin": "https://pencilsprotocol.io" 113 | }, 114 | "baseUrl": "https://pencilsprotocol.io/api/scroll/canvas/badge/pencil", 115 | "native": false 116 | }, 117 | { 118 | "name": "Scroller Agent Badge", 119 | "image": "https://kioskmeta.s3.ap-southeast-1.amazonaws.com/scroller-badge-bridged.png", 120 | "description": "Earn this badge by bridging with your Scroller NFT from ETH Mainnet to Scroll.", 121 | "attesterProxy": "0x045f9B1089F08C84045017B46dea9f72dEF36bb6", 122 | "badgeContract": "0x9aD600bDD45Cc30242fd905872962dc415F68530", 123 | "issuer": { 124 | "name": "Scroller NFT", 125 | "logo": "https://scroll-eco-list.netlify.app/logos/Scroller NFT.jpg", 126 | "origin": "https://www.scrollernft.xyz" 127 | }, 128 | "baseUrl": "https://vwb06c8e7h.execute-api.us-east-1.amazonaws.com/dev", 129 | "airdrop": true, 130 | "native": false 131 | }, 132 | { 133 | "name": "Unique Humanity Score", 134 | "image": "https://raw.githubusercontent.com/gitcoinco/passport/93889216df77f83470b948f5c8b3f48c3b0492b4/app/public/scrollBadgeImages/60%2B.png", 135 | "description": "This badge is for Scrollers who have a Passport score above 20, and have minted an onchain attestation to the Scroll network. Minting this badge informs everyone in the Scroll ecosystem that you're a real human!", 136 | "attesterProxy": "0x39571bBD5a4c5d1a5184004c63F45FE426dB85Ea", 137 | "badgeContract": "0xa623f348A12cFdC6B64a8c9e883dD9B243438E79", 138 | "issuer": { 139 | "name": "Passport XYZ", 140 | "logo": "https://scroll-eco-list.netlify.app/logos/Passport XYZ.jpg", 141 | "origin": "https://passport.gitcoin.co/#/scroll" 142 | }, 143 | "baseUrl": "https://passport-iam.gitcoin.co/scroll", 144 | "native": false 145 | }, 146 | { 147 | "name": "ZNS Badge", 148 | "image": "https://assets.znsconnect.io/scroll-badge.jpg", 149 | "description": "Earn this badge for minting a ZNS Domain on Scroll", 150 | "badgeContract": "0x0246D65bA41Da3DB6dB55e489146eB25ca3634E5", 151 | "issuer": { 152 | "name": "ZNS Connect", 153 | "logo": "https://scroll-eco-list.netlify.app/logos/ZNS Connect.jpg", 154 | "origin": "https://www.znsconnect.io/" 155 | }, 156 | "eligibilityCheck": true, 157 | "native": false 158 | }, 159 | { 160 | "name": "Scroll Cross-chain Professional", 161 | "image": "https://app.symbiosis.finance/scroll/badge.png", 162 | "description": "This badge is designed for users who bridged a minimum of $100 through Symbiosis to Scroll", 163 | "badgeContract": "0xB936740f00FFA90a55C362C33840913eaCFDcE25", 164 | "issuer": { 165 | "name": "Symbiosis", 166 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 167 | "origin": "https://symbiosis.finance" 168 | }, 169 | "native": false, 170 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 171 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 172 | }, 173 | { 174 | "name": " Scroll Reputation Attestation ", 175 | "image": "https://static.trustalabs.ai/staticfiles/app/icon/scbg.png", 176 | "description": "Trusta MEDIA Score on Scroll Network ranging from 20 to 100 is eligible for minting a Reputation Attestation Badge on Scroll. Craft this badge to affirm your status as an engaged participant in the realm of Scroll!", 177 | "badgeContract": "0x47FF789Da49686C6cC38998F76F78A12A5939082", 178 | "issuer": { 179 | "name": "Trusta Labs", 180 | "logo": "https://scroll-eco-list.netlify.app/logos/Trusta Labs.png", 181 | "origin": "https://trustgo.trustalabs.ai/att/scm" 182 | }, 183 | "native": false, 184 | "attesterProxy": "0x65AB4b5f30AeF8B29858eA2cbD6b0d0E68010206", 185 | "baseUrl": "https://mp.trustalabs.ai/attestations/media_badge" 186 | }, 187 | { 188 | "name": "Scroll Cross-chain Whale", 189 | "image": "https://app.symbiosis.finance/scroll/badge1.png", 190 | "description": "This badge is designed for users who bridged a minimum of $500 through Symbiosis to Scroll", 191 | "badgeContract": "0xaE98FC0e46977DaF650B180041dB20155ac66277", 192 | "issuer": { 193 | "name": "Symbiosis", 194 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 195 | "origin": "https://symbiosis.finance" 196 | }, 197 | "native": false, 198 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 199 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 200 | }, 201 | { 202 | "name": "Scroll Swapper", 203 | "image": "https://app.symbiosis.finance/scroll/badge2.png", 204 | "description": "This badge is designed for users who made a minimum of $10 on-chain swap on Scroll (E.g. ETH to USDC)", 205 | "badgeContract": "0x3c1A82D5877AB970Be9d80AB8185C5F9F1505C49", 206 | "issuer": { 207 | "name": "Symbiosis", 208 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 209 | "origin": "https://symbiosis.finance" 210 | }, 211 | "native": false, 212 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 213 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 214 | }, 215 | { 216 | "name": "Scroll cross-chain Beginner", 217 | "image": "https://app.symbiosis.finance/scroll/badge3.png", 218 | "description": "This badge is designed for users who bridged a minimum of $10 through Symbiosis to Scroll", 219 | "badgeContract": "0x66703cd7eBA1b114cA652b1C2DE268858cBedEc8", 220 | "issuer": { 221 | "name": "Symbiosis", 222 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 223 | "origin": "https://symbiosis.finance" 224 | }, 225 | "native": false, 226 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 227 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 228 | }, 229 | { 230 | "name": "XHS Holder", 231 | "image": "https://imagedelivery.net/Ebdw_AyMzN9_57Atf3-rVg/3c3a84ea-967a-4c64-29c6-8bafce785800/public", 232 | "description": "This badge is for holders with an XHS (Adaptive Humanity Score) above 0. Prove your humanity at https://xname.app/xhs .", 233 | "badgeContract": "0x7C0deB6aBf29cC829186933720af67da8B1EF633", 234 | "issuer": { 235 | "name": "XSTAR", 236 | "logo": "https://scroll-eco-list.netlify.app/logos/XSTAR.jpg", 237 | "origin": "https://xstar.id/" 238 | }, 239 | "native": false, 240 | "attesterProxy": "0xc2968d15a98406582a9fbc40c4508ce9cad4577e", 241 | "baseUrl": "https://scroll-canvas-api.xname.app/api" 242 | }, 243 | { 244 | "name": "Scroll Booster", 245 | "image": "https://imagedelivery.net/Ebdw_AyMzN9_57Atf3-rVg/b511e8e2-1af8-493f-2f7a-abce26bdcc00/public", 246 | "description": "This badge is for holders with .scroll names. Secure your .scroll identity at https://xname.app .", 247 | "badgeContract": "0xed269A526ad793CcB671Ef55A7AF6E45F300d462", 248 | "issuer": { 249 | "name": "XSTAR", 250 | "logo": "https://scroll-eco-list.netlify.app/logos/XSTAR.jpg", 251 | "origin": "https://xstar.id/" 252 | }, 253 | "native": false, 254 | "attesterProxy": "0xA599bA9656CD5bb3C1D841c9866704BdEB724DFe", 255 | "baseUrl": "https://scroll-canvas-api.xname.app/api/domain" 256 | }, 257 | { 258 | "name": "OmniHub Badge", 259 | "image": "https://omnihub.nyc3.digitaloceanspaces.com/scroll/badge.png", 260 | "description": "This badge is designed for users who created a minimum one NFT collection through OmniHub to Scroll network.", 261 | "badgeContract": "0xdd8CCDad022999afD61DFda146e4C40F47dE4Eec", 262 | "issuer": { 263 | "name": "OmniHub", 264 | "logo": "https://scroll-eco-list.netlify.app/logos/OmniHub.jpg", 265 | "origin": "https://omnihub.xyz" 266 | }, 267 | "native": false, 268 | "attesterProxy": "0x13babb8C705506Fd71f7e9Aff431B9aF2E659FE9", 269 | "baseUrl": "https://api.omnihub.xyz/api/integration/scroll" 270 | }, 271 | { 272 | "name": " Proof of Humanity Badge ", 273 | "image": "https://static.trustalabs.ai/staticfiles/app/icon/sc3.png", 274 | "description": " Demonstrate your human agency exclusively through your blockchain activities, without the necessity for validation from a centralized entity. The issuance of this badge serves as a testament to your authenticity as a human participant within the Scroll ecosystem.", 275 | "badgeContract": "0x26B97C832C04C06cAd34dCE23c701beDC3555a5c", 276 | "category": "Identity", 277 | "issuer": { 278 | "name": "Trusta Labs", 279 | "logo": "https://scroll-eco-list.netlify.app/logos/Trusta Labs.png", 280 | "origin": "https://trustgo.trustalabs.ai/att/scs" 281 | }, 282 | "native": false, 283 | "attesterProxy": "0x9C8a1c5B993BaF52E9dD920181767b67bBd4d3A6", 284 | "baseUrl": "https://mp.trustalabs.ai/attestations/poh_badge" 285 | }, 286 | { 287 | "name": "Scroll RetroBridger", 288 | "image": "https://ipfs.io/ipfs/QmQLj8S8guqjHuXPexGVgeEZC1QUp13VCQEtFjX6jty2dk/0.png", 289 | "description": "RetroBridger Badge on Scroll L2 dedicated for everyone who bridged from 0.05 ETH or $150 worth of stables through RetroBridge to Scroll Network", 290 | "badgeContract": "0x59700c6Ed282eD7611943129f226914ACBB3982b", 291 | "category": "Achievement", 292 | "issuer": { 293 | "name": "Retro Bridge", 294 | "logo": "https://scroll-eco-list.netlify.app/logos/Retro Bridge.jpg", 295 | "origin": "https://app.retrobridge.io" 296 | }, 297 | "native": false, 298 | "attesterProxy": "0xbE3B5EB273567D3D5CeAB69815CfD254Ee48FAF3", 299 | "baseUrl": "https://backend.retrobridge.io/api/quest" 300 | }, 301 | { 302 | "name": "Symbiosis Pro Swapper", 303 | "image": "https://app.symbiosis.finance/scroll/badge4.png", 304 | "description": "This badge is designed for users who made a minimum of $100 on-chain swap on Scroll (E.g. wrsETH to weETH)", 305 | "badgeContract": "0x0a584c042133aF17f3e522F09A77Ee1496f3a567", 306 | "category": "Achievement", 307 | "issuer": { 308 | "name": "Symbiosis", 309 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 310 | "origin": "https://symbiosis.finance/" 311 | }, 312 | "native": false, 313 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 314 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 315 | }, 316 | { 317 | "name": "Smilecobra Genesis Badge", 318 | "image": "https://static.smilecobra.io/attach/2024/08/66ac7306e778.png", 319 | "description": "Users who complete quest on the SmileCobra platform and mint the SMC HONOUR NFT will receive the SmileCobra Genesis Badge. Holders of this badge will enjoy potential airdrop incentives across the entire platform in the future.", 320 | "badgeContract": "0x7ecf596Ed5fE6957158cD626b6bE2A667267424f", 321 | "category": "Achievement", 322 | "issuer": { 323 | "name": "SmileCobra Studio", 324 | "logo": "https://scroll-eco-list.netlify.app/logos/SmileCobra Studio.jpg", 325 | "origin": "https://www.smilecobra.io/smc" 326 | }, 327 | "native": false, 328 | "attesterProxy": "0xA6447fA0508c6bEfb413a0adE5fCfe26C4998DeA", 329 | "baseUrl": "https://api.smilecobra.io/tripartite/scroll/badge" 330 | }, 331 | { 332 | "name": "Scroll Explorer", 333 | "image": "https://xenobunny.s3.amazonaws.com/images/scroll-canvas/scroll-explorer-badge.png", 334 | "description": "Own at least 1 piece of land on Scroll, either through purchase or adventure reward.", 335 | "badgeContract": "0x7188B352C818f291432CDe8E4B1f0576c188F9e4", 336 | "category": "Achievement", 337 | "issuer": { 338 | "name": "XenoBunny", 339 | "logo": "https://scroll-eco-list.netlify.app/logos/XenoBunny.jpg", 340 | "origin": "https://www.xenobunny.xyz/" 341 | }, 342 | "native": false, 343 | "attesterProxy": "0x2DCa57F08b8445BD6265b3667D5a420089255b92", 344 | "baseUrl": "https://publicapi.xenobunny.xyz/canvas/lands" 345 | }, 346 | { 347 | "name": "Scroll Overlord", 348 | "image": "https://xenobunny.s3.amazonaws.com/images/scroll-canvas/scroll-overlord-badge.png", 349 | "description": "Participated in at least one Land War season on scroll.", 350 | "badgeContract": "0xb2c69173829E23EE2876FBe13Ab474FEe101bc64", 351 | "category": "Achievement", 352 | "issuer": { 353 | "name": "XenoBunny", 354 | "logo": "https://scroll-eco-list.netlify.app/logos/XenoBunny.jpg", 355 | "origin": "https://www.xenobunny.xyz/" 356 | }, 357 | "native": false, 358 | "eligibilityCheck": true 359 | }, 360 | { 361 | "name": "Scroll Domain Master Badge 🎖️", 362 | "image": "https://assets.znsconnect.io/domain-master-badge.png", 363 | "description": "Achieve the Scroll Domain Master Badge by minting 5 domains on Scroll. This prestigious badge marks you as a master in the domain space! Mint your domains now: https://zns.bio/", 364 | "badgeContract": "0x55B867a955e4384bcAc03eF7F2E492F68016C152", 365 | "category": "Achievement", 366 | "issuer": { 367 | "name": "ZNS Connect", 368 | "logo": "https://scroll-eco-list.netlify.app/logos/ZNS Connect.jpg", 369 | "origin": "https://www.znsconnect.io/" 370 | }, 371 | "native": false, 372 | "eligibilityCheck": true 373 | }, 374 | { 375 | "name": "Pencils SOUL Drops", 376 | "image": "https://pencilsprotocol.io/nft/scroll/pencil/metadata-soul-drops.png", 377 | "description": "The Pencils SOUL Drops program is linked to users’ verified social identities. Holders earn Pencil Points and rewards from Scroll’s ecosystem partners.", 378 | "badgeContract": "0x48BD495DD1EcdfBd29be9EAc16242Fd477c45Cd8", 379 | "category": "Status", 380 | "issuer": { 381 | "name": "Pencils Protocol", 382 | "logo": "https://scroll-eco-list.netlify.app/logos/Pencils Protocol.jpg", 383 | "origin": "https://pencilsprotocol.io" 384 | }, 385 | "native": false, 386 | "attesterProxy": "0x546f7e7257963DcFC3A7885e911e47b76c05BB76", 387 | "baseUrl": "https://pencilsprotocol.io/api/scroll/canvas/badge/pencil" 388 | }, 389 | { 390 | "name": "Explorer Certificate", 391 | "image": "https://xenobunny.s3.amazonaws.com/images/scroll-canvas/scroll-certificate-badge.png", 392 | "description": "Participated in at least one Land War season (XENOVERSE) on scroll.", 393 | "badgeContract": "0x4e2F089a2919df2f0264Fd5e8B43b794F3098808", 394 | "category": "Achievement", 395 | "issuer": { 396 | "name": "XenoBunny", 397 | "logo": "https://scroll-eco-list.netlify.app/logos/XenoBunny.jpg", 398 | "origin": "https://www.xenobunny.xyz/" 399 | }, 400 | "native": false, 401 | "attesterProxy": "0x764Af55daf1cBC7049FAef8e6BC3F626534a7D74", 402 | "baseUrl": "https://publicapi.xenobunny.xyz/canvas/certificate" 403 | }, 404 | { 405 | "name": "Scrolling bridge 1", 406 | "image": "https://app.symbiosis.finance/scroll/badge5.png", 407 | "description": "This badge is designed for users who made cross-chain swap from Blast to Scroll.", 408 | "badgeContract": "0xB69cF3247b60F72ba560B3C1e0F53DAF9e9D5201", 409 | "category": "Achievement", 410 | "issuer": { 411 | "name": "Symbiosis", 412 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 413 | "origin": "https://symbiosis.finance" 414 | }, 415 | "native": false, 416 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 417 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 418 | }, 419 | { 420 | "name": "Scrolling bridge 2", 421 | "image": "https://app.symbiosis.finance/scroll/badge6.png", 422 | "description": "This badge is designed for users who made cross-chain swap from Arbitrum One to Scroll.", 423 | "badgeContract": "0x35CB802ede5f970AE6d7B8E7b7b82C82Fea273C7", 424 | "category": "Achievement", 425 | "issuer": { 426 | "name": "Symbiosis", 427 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 428 | "origin": "https://symbiosis.finance/" 429 | }, 430 | "native": false, 431 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 432 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 433 | }, 434 | { 435 | "name": "Scrolling bridge 3", 436 | "image": "https://app.symbiosis.finance/scroll/badge7.png", 437 | "description": "This badge is designed for users who made cross-chain swap from Base to Scroll.", 438 | "badgeContract": "0x4445BE64c03154052bd661fD1B0d01FC625Df06E", 439 | "category": "Status", 440 | "issuer": { 441 | "name": "Symbiosis", 442 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 443 | "origin": "https://symbiosis.finance/" 444 | }, 445 | "native": false, 446 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 447 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 448 | }, 449 | { 450 | "name": "Scrolling bridge 4", 451 | "image": "https://app.symbiosis.finance/scroll/badge8.png", 452 | "description": "This badge is designed for users who made cross-chain swap from Optimism to Scroll.", 453 | "badgeContract": "0x475d1E9Be98B7B7b97D7ED9695541A0209e982dE", 454 | "category": "Achievement", 455 | "issuer": { 456 | "name": "Symbiosis", 457 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 458 | "origin": "https://symbiosis.finance/" 459 | }, 460 | "native": false, 461 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 462 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 463 | }, 464 | { 465 | "name": "Scrolling bridge 5", 466 | "image": "https://app.symbiosis.finance/scroll/badge9.png", 467 | "description": "This badge is designed for users who made cross-chain swap from Taiko to Scroll.", 468 | "badgeContract": "0xCA5d53f143822dd8b9789b1A12d2a10A39a499e4", 469 | "category": "Achievement", 470 | "issuer": { 471 | "name": "Symbiosis", 472 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 473 | "origin": "https://symbiosis.finance/" 474 | }, 475 | "native": false, 476 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 477 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 478 | }, 479 | { 480 | "name": "Scrolling bridge 6", 481 | "image": "https://app.symbiosis.finance/scroll/badge10.png", 482 | "description": "This badge is designed for users who made cross-chain swap from zkSync to Scroll.", 483 | "badgeContract": "0x9765B7B7926Cb27b84f5F48EA0758Fa99da3C7d6", 484 | "category": "Achievement", 485 | "issuer": { 486 | "name": "Symbiosis", 487 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 488 | "origin": "https://symbiosis.finance/" 489 | }, 490 | "native": false, 491 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 492 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 493 | }, 494 | { 495 | "name": "Scrolling bridge 7", 496 | "image": "https://app.symbiosis.finance/scroll/badge11.png", 497 | "description": "This badge is designed for users who made cross-chain swap from Linea to Scroll.", 498 | "badgeContract": "0x6d352E2987C0AC7D896B74453f400477dE7446F0", 499 | "category": "Status", 500 | "issuer": { 501 | "name": "Symbiosis", 502 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 503 | "origin": "https://symbiosis.finance/" 504 | }, 505 | "native": false, 506 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 507 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 508 | }, 509 | { 510 | "name": "Scrolling bridge 8", 511 | "image": "https://app.symbiosis.finance/scroll/badge12.png", 512 | "description": "This badge is designed for users who made cross-chain swap from Mantle to Scroll.", 513 | "badgeContract": "0x5bA1cC19C89BeD7d4660316D1eB41B6A581B98c7", 514 | "category": "Achievement", 515 | "issuer": { 516 | "name": "Symbiosis", 517 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 518 | "origin": "https://symbiosis.finance/" 519 | }, 520 | "native": false, 521 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 522 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 523 | }, 524 | { 525 | "name": "Scrolling bridge 9", 526 | "image": "https://app.symbiosis.finance/scroll/badge13.png", 527 | "description": "This badge is designed for users who made cross-chain swap from Polygon zkEVM to Scroll.", 528 | "badgeContract": "0xCd223ce0Cc6C05c1604f8f83A50e98202E600bD6", 529 | "category": "Status", 530 | "issuer": { 531 | "name": "Symbiosis", 532 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 533 | "origin": "https://symbiosis.finance/" 534 | }, 535 | "native": false, 536 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 537 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 538 | }, 539 | { 540 | "name": "Scrolling bridge 10", 541 | "image": "https://app.symbiosis.finance/scroll/badge14.png", 542 | "description": "This badge is designed for users who made cross-chain swap from Mode to Scroll.", 543 | "badgeContract": "0x3573335B5128F50F79617f1218f2A7aA0EE68703", 544 | "category": "Status", 545 | "issuer": { 546 | "name": "Symbiosis", 547 | "logo": "https://scroll-eco-list.netlify.app/logos/Symbiosis.png", 548 | "origin": "https://symbiosis.finance/" 549 | }, 550 | "native": false, 551 | "attesterProxy": "0x7673F45e6E95373BA22651A4f5f594EDEC3006BC", 552 | "baseUrl": "https://api.symbiosis.finance/crosschain/v1/scroll-badge" 553 | }, 554 | { 555 | "name": "Nuri Locker Badge (10)", 556 | "image": "https://raw.githubusercontent.com/RamsesExchange/nuri-canvas-contracts/master/images/nuri-locker-standard-badge.png", 557 | "description": "This badge represents ownership of a veNURI lock with at least 10 NURI and a locktime above 3 years", 558 | "badgeContract": "0x7E7946A39cAAA00c129D7A61c562a1fBb7974718", 559 | "category": "Achievement", 560 | "issuer": { 561 | "name": "Nuri Exchange", 562 | "logo": "https://scroll-eco-list.netlify.app/logos/Nuri Exchange.jpeg", 563 | "origin": "https://nuri.exchange", 564 | "communityURL": "https://discord.gg/n9wgqpVwsn" 565 | }, 566 | "native": false, 567 | "eligibilityCheck": true 568 | }, 569 | { 570 | "name": "Hippo Badge", 571 | "image": "https://storage.googleapis.com/hipposwap-interface-website/images/hippo/badge_hippo.png", 572 | "description": "This badge is designed for users who have swapped a minimum of $100 on HippoSwap", 573 | "badgeContract": "0x3eaD1dE2ccC74EC121d433F49B7b9610773fd29e", 574 | "category": "Achievement", 575 | "issuer": { 576 | "name": "Hippo Swap", 577 | "logo": "https://scroll-eco-list.netlify.app/logos/Hippo Swap.png", 578 | "origin": "https://hipposwap.finance/", 579 | "communityURL": "https://link3.to/hipposwap" 580 | }, 581 | "native": false, 582 | "airdrop": true, 583 | "baseUrl": "https://api.hipposwap.finance/api/badge" 584 | }, 585 | { 586 | "name": "NFTs2Me Creator Badge", 587 | "image": "https://ipfs.io/ipfs/QmZa47KUwQzFhH3f8oHcdTaodsaSq3zAh7EoAAGGS4FFjP", 588 | "description": "Badge awarded for creating at least one NFT Collection on Scroll using https://NFTs2Me.com", 589 | "badgeContract": "0x1121F46b5581B5285BC571703cd772B336aa12e6", 590 | "category": "Achievement", 591 | "issuer": { 592 | "name": "NFTs2Me", 593 | "logo": "https://scroll-eco-list.netlify.app/logos/NFTs2Me.png", 594 | "origin": "https://nfts2me.com/scroll-badges/", 595 | "communityURL": "https://discord.com/invite/Usmgxj2Msk" 596 | }, 597 | "native": false, 598 | "eligibilityCheck": true 599 | }, 600 | { 601 | "name": "NFTs2Me Supporter Badge", 602 | "image": "https://ipfs.io/ipfs/QmVvXJHhZjo9E2cmYW4Et1WNa7aaMjsCHf81j5hETr98dX", 603 | "description": "This badge is awarded as owner of NFTs2Me Supporter Pins. Mint yours at https://nfts2me.com/scroll-badges/", 604 | "badgeContract": "0x18ccC9EeDc31b570E106b452534c691F68562329", 605 | "category": "Status", 606 | "issuer": { 607 | "name": "NFTs2Me", 608 | "logo": "https://scroll-eco-list.netlify.app/logos/NFTs2Me.png", 609 | "origin": "https://nfts2me.com/scroll-badges/", 610 | "communityURL": "https://discord.com/invite/Usmgxj2Msk" 611 | }, 612 | "native": false, 613 | "eligibilityCheck": true 614 | }, 615 | { 616 | "name": "SyncSwap Lucky Trader", 617 | "image": "https://syncswap.xyz/images/scroll-badge/1.png", 618 | "description": "This badge is rewarded to early SyncSwap users on Scroll who have made one or more swaps for more than $450.", 619 | "badgeContract": "0x7C35e966FfE9966B6BBdeC34F00E5F2dE8d1943A", 620 | "category": "Achievement", 621 | "issuer": { 622 | "name": "Syncswap", 623 | "logo": "https://scroll-eco-list.netlify.app/logos/Syncswap.png", 624 | "origin": "https://syncswap.xyz", 625 | "communityURL": "https://discord.gg/syncswap" 626 | }, 627 | "native": false, 628 | "attesterProxy": "0x3b7607203e7532884cB72Fe78aBB12b139d5e728", 629 | "baseUrl": "https://api.syncswap.xyz/api/v2/scroll/badge" 630 | }, 631 | { 632 | "name": "SyncSwap Stargazer", 633 | "image": "https://syncswap.xyz/images/scroll-badge/2.png", 634 | "description": "This badge is rewarded to early SyncSwap users on Scroll who have one or more liquidity position over $1000.", 635 | "badgeContract": "0x15032D6E25A65488e4B914921C9bbbCa35aeB40C", 636 | "category": "Achievement", 637 | "issuer": { 638 | "name": "Syncswap", 639 | "logo": "https://scroll-eco-list.netlify.app/logos/Syncswap.png", 640 | "origin": "https://syncswap.xyz", 641 | "communityURL": "https://discord.gg/syncswap" 642 | }, 643 | "native": false, 644 | "attesterProxy": "0x3b7607203e7532884cB72Fe78aBB12b139d5e728", 645 | "baseUrl": "https://api.syncswap.xyz/api/v2/scroll/badge" 646 | }, 647 | { 648 | "name": "SyncSwap Master", 649 | "image": "https://syncswap.xyz/images/scroll-badge/3.png", 650 | "description": "This badge is rewarded to early SyncSwap users on Scroll who have one or more liquidity position in SyncSwap Aqua Pools over $1000.", 651 | "badgeContract": "0xA7e31C8D781A69Dc82f18F3F7adcd96945F640b5", 652 | "category": "Achievement", 653 | "issuer": { 654 | "name": "Syncswap", 655 | "logo": "https://scroll-eco-list.netlify.app/logos/Syncswap.png", 656 | "origin": "https://syncswap.xyz", 657 | "communityURL": "https://discord.gg/syncswap" 658 | }, 659 | "native": false, 660 | "attesterProxy": "0x3b7607203e7532884cB72Fe78aBB12b139d5e728", 661 | "baseUrl": "https://api.syncswap.xyz/api/v2/scroll/badge" 662 | }, 663 | { 664 | "name": "Entry Scroll Bridger Badge", 665 | "image": "https://owlto.finance/icon/badge/bronze.png", 666 | "description": "Owltors who complete one bridge to Scroll Network via Owlto Finance can claim the Badge.", 667 | "badgeContract": "0x75ea8fA878314FDb9325a1652898bEfcccf88292", 668 | "category": "Achievement", 669 | "issuer": { 670 | "name": "Owlto Finance", 671 | "logo": "https://scroll-eco-list.netlify.app/logos/Owlto Finance.png", 672 | "origin": "https://owlto.finance/", 673 | "communityURL": "https://discord.gg/owlto" 674 | }, 675 | "native": false, 676 | "attesterProxy": "0x850C116ea39b49d8714BE4d1dEffDC1009D66C48", 677 | "baseUrl": "https://owlto.finance/nocore_api/v1/campaign/scroll-badge" 678 | }, 679 | { 680 | "name": "Loyal Scroll Bridger Badge", 681 | "image": "https://owlto.finance/icon/badge/silver.png", 682 | "description": "Owltors who complete three bridges to Scroll Network via Owlto Finance can claim the Badge.", 683 | "badgeContract": "0x2F942fbCd37693B2f4254fEe6e4cd70508e6235a", 684 | "category": "Achievement", 685 | "issuer": { 686 | "name": "Owlto Finance", 687 | "logo": "https://scroll-eco-list.netlify.app/logos/Owlto Finance.png", 688 | "origin": "https://owlto.finance/", 689 | "communityURL": "https://discord.gg/owlto" 690 | }, 691 | "native": false, 692 | "attesterProxy": "0x850C116ea39b49d8714BE4d1dEffDC1009D66C48", 693 | "baseUrl": "https://owlto.finance/nocore_api/v1/campaign/scroll-badge" 694 | }, 695 | { 696 | "name": "Fanaticism Scroll Bridger Badge", 697 | "image": "https://owlto.finance/icon/badge/gold.png", 698 | "description": "Owltors who complete five bridges to Scroll Network via Owlto Finance can claim the Badge.", 699 | "badgeContract": "0xB9CD7EC2A2261AEA5B0251cf2394e5345C95df61", 700 | "category": "Achievement", 701 | "issuer": { 702 | "name": "Owlto Finance", 703 | "logo": "https://scroll-eco-list.netlify.app/logos/Owlto Finance.png", 704 | "origin": "https://owlto.finance/", 705 | "communityURL": "https://discord.gg/owlto" 706 | }, 707 | "native": false, 708 | "attesterProxy": "0x850C116ea39b49d8714BE4d1dEffDC1009D66C48", 709 | "baseUrl": "https://owlto.finance/nocore_api/v1/campaign/scroll-badge" 710 | }, 711 | { 712 | "name": "Conft 2024 Badge", 713 | "image": "https://ipfs.io/ipfs/QmeoqEhVD2EygXpM4HTCFBgnRD9cNi5R5uUCFUooNNuYW1", 714 | "description": "Conft 2024 Badge is for users with a unique ‘.s’ domain name registered on Scroll via Conft’s Name Service. Users with this badge secure eligibility for future rewards from Conft.", 715 | "badgeContract": "0x218e736Cc77c1339e42Ac6829ae93AC3CEA65b7a", 716 | "category": "Achievement", 717 | "issuer": { 718 | "name": "coNFT", 719 | "logo": "https://scroll-eco-list.netlify.app/logos/coNFT.jpg", 720 | "origin": "https://conft.app/", 721 | "communityURL": "https://x.com/ConftApp" 722 | }, 723 | "native": false, 724 | "eligibilityCheck": true 725 | } 726 | ] 727 | } 728 | --------------------------------------------------------------------------------