├── .gitignore ├── package.json ├── fetchOldPosts.js ├── insertOldPosts.js ├── schema.sql ├── indexingLogic.js └── oldPosts.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "devhub-queryapi", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "indexingLogic.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "near-api-js": "^2.1.4", 13 | "node-fetch": "^2.7.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /fetchOldPosts.js: -------------------------------------------------------------------------------- 1 | const nearAPI = require("near-api-js"); 2 | const fs = require("fs/promises"); 3 | 4 | const { keyStores, KeyPair } = nearAPI; 5 | const myKeyStore = new keyStores.InMemoryKeyStore(); 6 | 7 | const { connect } = nearAPI; 8 | 9 | const connectionConfig = { 10 | networkId: "mainnet", 11 | keyStore: myKeyStore, // first create a key store 12 | nodeUrl: "https://rpc.mainnet.near.org", 13 | walletUrl: "https://wallet.mainnet.near.org", 14 | helperUrl: "https://helper.mainnet.near.org", 15 | explorerUrl: "https://explorer.mainnet.near.org", 16 | }; 17 | 18 | async function main() { 19 | const nearConnection = await connect(connectionConfig); 20 | const account = await nearConnection.account("devgovgigs.near"); 21 | 22 | const contract = new nearAPI.Contract(account, "devgovgigs.near", { 23 | viewMethods: ["get_post", "get_parent_id"], // your smart-contract has a function `my_smart_contract_function` 24 | }); 25 | 26 | // missing old posts that were not created by add_post 27 | let ids = [...Array(55).keys()]; 28 | ids.push(60); 29 | 30 | let posts = await Promise.all(ids.map(id => contract.get_post({post_id: id}))) 31 | let post_parents = await Promise.all(ids.map(id => contract.get_parent_id({post_id: id}))) 32 | posts = posts.map((post, i) => ({...post, parent_id: post_parents[i]})) 33 | await fs.writeFile("oldPosts.json", JSON.stringify(posts, null, 2)) 34 | } 35 | 36 | main() -------------------------------------------------------------------------------- /insertOldPosts.js: -------------------------------------------------------------------------------- 1 | const queryApiAccount = "bo_near"; 2 | const indexer = "devhub_v36"; 3 | 4 | const prefix = queryApiAccount + "_" + indexer; 5 | 6 | const fetch = require("node-fetch"); 7 | 8 | 9 | async function fetchGraphQL(operationsDoc, operationName, variables) { 10 | const result = await fetch( 11 | "https://near-queryapi.api.pagoda.co/v1/graphql", 12 | { 13 | method: "POST", 14 | headers: {'Content-Type': 'application/json', 'x-hasura-role': queryApiAccount}, 15 | body: JSON.stringify({ 16 | query: operationsDoc, 17 | variables: variables, 18 | operationName: operationName 19 | }) 20 | } 21 | ); 22 | 23 | return await result.json(); 24 | } 25 | 26 | const operationsDoc = ` 27 | mutation MyMutation($posts: [${prefix}_posts_insert_input!] = {}, $snapshots: [${prefix}_post_snapshots_insert_input!] = {}, $likes: [${prefix}_likes_insert_input!] = {}) { 28 | insert_${prefix}_posts( 29 | objects: $posts 30 | on_conflict: {constraint: posts_pkey} 31 | ) { 32 | returning { 33 | id 34 | } 35 | } 36 | insert_${prefix}_post_snapshots( 37 | objects: $snapshots 38 | on_conflict: {constraint: post_snapshots_pkey} 39 | ) { 40 | returning { 41 | post_id 42 | block_height 43 | } 44 | } 45 | insert_${prefix}_likes( 46 | objects: $likes 47 | on_conflict: {constraint: likes_pkey} 48 | ) { 49 | returning { 50 | author_id 51 | post_id 52 | } 53 | } 54 | } 55 | 56 | `; 57 | 58 | async function main() { 59 | const oldPosts = require('./oldPosts.json') 60 | const posts = oldPosts.map((post) => ({author_id: post.author_id, id: post.id, parent_id: post.parent_id})); 61 | const snapshots = oldPosts.flatMap(post => [post.snapshot, ...post.snapshot_history].map(snapshot => ({ 62 | post_id: post.id, 63 | ts: snapshot.timestamp, 64 | editor_id: snapshot.editor_id, 65 | labels: snapshot.labels, 66 | post_type: snapshot.post_type, 67 | description: snapshot.description, 68 | name: snapshot.name, 69 | sponsorship_token: snapshot.sponsorship_token, 70 | sponsorship_amount: snapshot.amount, 71 | sponsorship_supervisor: snapshot.supervisor, 72 | }))); 73 | const likes = oldPosts.flatMap(post => post.likes.map(like => ({author_id: like.author_id, post_id: post.id, ts: like.timestamp}))); 74 | 75 | const { errors, data } = await fetchGraphQL( 76 | operationsDoc, 77 | "MyMutation", 78 | {posts, snapshots, likes} 79 | ); 80 | if (errors) { 81 | console.error(errors); 82 | } 83 | console.log(JSON.stringify(data, null, 2)); 84 | } 85 | 86 | main() -------------------------------------------------------------------------------- /schema.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE 2 | posts ( 3 | id serial primary key, 4 | -- due to how query api runs, a child post can be processed by the worker before the parent post, so we can't enforce parent_id as foreign key 5 | parent_id int, 6 | author_id VARCHAR not null 7 | ); 8 | 9 | CREATE TABLE 10 | post_snapshots ( 11 | -- due to how query api runs, an edit_post can be processed by the worker before corresponding add_post, so we can't enforce post_id as foreign key 12 | post_id int, 13 | block_height bigint, 14 | ts decimal(20, 0), 15 | editor_id varchar, 16 | labels jsonb, 17 | post_type varchar, 18 | description text, 19 | "name" text, 20 | sponsorship_token varchar, 21 | sponsorship_amount decimal, 22 | sponsorship_supervisor varchar, 23 | primary key (post_id, ts) 24 | ); 25 | 26 | CREATE TABLE 27 | dumps ( 28 | receipt_id varchar primary key, 29 | block_height bigint, 30 | block_timestamp decimal(20, 0), 31 | method_name varchar, 32 | args varchar, 33 | caller varchar, 34 | post_id bigint 35 | ); 36 | 37 | create index 38 | idx_posts_author_id on posts (author_id); 39 | 40 | create index 41 | idx_posts_parent_id on posts (parent_id); 42 | 43 | CREATE INDEX 44 | idx_post_snapshots_post_id ON post_snapshots (post_id); 45 | 46 | CREATE INDEX 47 | idx_post_snapshots_ts ON post_snapshots (ts); 48 | 49 | CREATE INDEX 50 | idx_post_snapshots_editor_id ON post_snapshots (editor_id); 51 | 52 | CREATE INDEX 53 | idx_post_snapshots_labels ON post_snapshots USING GIN (labels); 54 | 55 | CREATE INDEX 56 | idx_fulltext_post_snapshots_description ON post_snapshots USING gin (to_tsvector('english', description)); 57 | 58 | CREATE INDEX 59 | idx_fulltext_post_snapshots_name ON post_snapshots USING gin (to_tsvector('english', name)); 60 | 61 | create index 62 | idx_post_snapshots_sponsorship_supervisor on post_snapshots (sponsorship_supervisor); 63 | 64 | CREATE VIEW 65 | posts_with_latest_snapshot AS 66 | SELECT 67 | ps.post_id, 68 | p.parent_id, 69 | p.author_id, 70 | ps.block_height, 71 | ps.ts, 72 | ps.editor_id, 73 | ps.labels, 74 | ps.post_type, 75 | ps.description, 76 | ps.name, 77 | ps.sponsorship_token, 78 | ps.sponsorship_amount, 79 | ps.sponsorship_supervisor 80 | FROM 81 | posts p 82 | INNER JOIN ( 83 | SELECT 84 | post_id, 85 | MAX(ts) AS max_ts 86 | FROM 87 | post_snapshots 88 | GROUP BY 89 | post_id 90 | ) latest_snapshots ON p.id = latest_snapshots.post_id 91 | INNER JOIN post_snapshots ps ON latest_snapshots.post_id = ps.post_id 92 | AND latest_snapshots.max_ts = ps.ts; 93 | 94 | CREATE TABLE 95 | likes ( 96 | post_id int not null, 97 | author_id varchar not null, 98 | ts decimal(20, 0) not null, 99 | primary key (post_id, author_id) 100 | ); 101 | 102 | create index 103 | idx_likes_post_id on likes (post_id); 104 | 105 | create index 106 | idx_likes_author_id on likes (author_id); 107 | 108 | create index 109 | idx_likes_ts on likes (ts); 110 | -------------------------------------------------------------------------------- /indexingLogic.js: -------------------------------------------------------------------------------- 1 | import { Block } from "@near-lake/primitives"; 2 | /** 3 | * Note: We only support javascript at the moment. We will support Rust, Typescript in a further release. 4 | */ 5 | 6 | /** 7 | * getBlock(block, context) applies your custom logic to a Block on Near and commits the data to a database. 8 | * context is a global variable that contains helper methods. 9 | * context.db is a subfield which contains helper methods to interact with your database. 10 | * 11 | * Learn more about indexers here: https://docs.near.org/concepts/advanced/indexers 12 | * 13 | * @param {block} Block - A Near Protocol Block 14 | */ 15 | async function getBlock(block: Block) { 16 | const devhubOps = getDevHubOps(block); 17 | 18 | if (devhubOps.length > 0) { 19 | const authorToPostId = buildAuthorToPostIdMap(block); 20 | const blockHeight = block.blockHeight; 21 | const blockTimestamp = block.header().timestampNanosec; 22 | await Promise.all( 23 | devhubOps.map((op) => 24 | indexOp(op, authorToPostId, blockHeight, blockTimestamp, context) 25 | ) 26 | ); 27 | } 28 | } 29 | 30 | function base64decode(encodedValue) { 31 | let buff = Buffer.from(encodedValue, "base64"); 32 | return JSON.parse(buff.toString("utf-8")); 33 | } 34 | 35 | function base64toHex(encodedValue) { 36 | let buff = Buffer.from(encodedValue, "base64"); 37 | return buff.toString("hex"); 38 | } 39 | 40 | function getDevHubOps(block) { 41 | return block 42 | .actions() 43 | .filter((action) => action.receiverId === "devgovgigs.near") 44 | .flatMap((action) => 45 | action.operations 46 | .filter((operation) => operation["FunctionCall"]) 47 | .map((operation) => ({ 48 | ...operation["FunctionCall"], 49 | caller: action.predecessorId, 50 | })) 51 | .map((operation) => ({ 52 | ...operation, 53 | methodName: operation.methodName || operation.method_name, 54 | })) 55 | .filter( 56 | (operation) => 57 | operation.methodName === "add_post" || 58 | operation.methodName === "edit_post" || 59 | operation.methodName === "add_like" 60 | ) 61 | .map((functionCallOperation) => ({ 62 | ...functionCallOperation, 63 | args: base64decode(functionCallOperation.args), 64 | receiptId: action.receiptId, 65 | })) 66 | ); 67 | } 68 | 69 | function buildAuthorToPostIdMap(block) { 70 | const stateChanges = block.streamerMessage.shards 71 | .flatMap((e) => e.stateChanges) 72 | .filter( 73 | (stateChange) => 74 | stateChange.change.accountId === "devgovgigs.near" && 75 | stateChange.type === "data_update" 76 | ); 77 | const addOrEditPost = stateChanges 78 | .map((stateChange) => stateChange.change) 79 | .filter((change) => base64toHex(change.keyBase64).startsWith("05")) 80 | .map((c) => ({ 81 | k: Buffer.from(c.keyBase64, "base64"), 82 | v: Buffer.from(c.valueBase64, "base64"), 83 | })); 84 | const authorToPostId = Object.fromEntries( 85 | addOrEditPost.map((kv) => [ 86 | kv.v.slice(13, 13 + kv.v.slice(9, 13).readUInt32LE()).toString("utf-8"), 87 | Number(kv.k.slice(1).readBigUInt64LE()), 88 | ]) 89 | ); 90 | return authorToPostId; 91 | } 92 | 93 | async function indexOp( 94 | op, 95 | authorToPostId, 96 | blockHeight, 97 | blockTimestamp, 98 | context 99 | ) { 100 | let receipt_id = op.receiptId; 101 | let caller = op.caller; 102 | let args = op.args; 103 | let post_id = authorToPostId[op.caller] ?? null; 104 | let method_name = op.methodName; 105 | 106 | if (method_name == "add_like") { 107 | post_id = args.post_id; 108 | } 109 | let err = await createDump(context, { 110 | receipt_id, 111 | method_name, 112 | block_height: blockHeight, 113 | block_timestamp: blockTimestamp, 114 | args: JSON.stringify(args), 115 | caller, 116 | post_id, 117 | }); 118 | if (err !== null) { 119 | return; 120 | } 121 | 122 | // currently Query API cannot tell if it's a failed receipt, so we estimate by looking the state changes. 123 | if (post_id === null) { 124 | console.log( 125 | `Receipt to ${method_name} with receipt_id ${receipt_id} at ${blockHeight} doesn't result in a state change, it's probably a failed receipt, please check` 126 | ); 127 | return; 128 | } 129 | 130 | if (method_name === "add_like") { 131 | let like = { 132 | post_id, 133 | author_id: caller, 134 | ts: blockTimestamp, 135 | }; 136 | await createLike(context, like); 137 | return; 138 | } 139 | 140 | if (method_name === "add_post") { 141 | let parent_id = args.parent_id; 142 | 143 | let post = { 144 | id: post_id, 145 | parent_id, 146 | author_id: caller, 147 | }; 148 | let err = await createPost(context, post); 149 | if (err !== null) { 150 | return; 151 | } 152 | } 153 | 154 | if (method_name === "add_post" || method_name === "edit_post") { 155 | let labels = args.labels; 156 | let post_type = args.body.post_type; 157 | let description = args.body.description; 158 | let name = args.body.name; 159 | let sponsorship_token = args.body.sponsorship_token; 160 | let sponsorship_amount = args.body.amount; 161 | let sponsorship_supervisor = args.body.supervisor; 162 | 163 | let post_snapshot = { 164 | post_id, 165 | block_height: blockHeight, 166 | ts: blockTimestamp, 167 | editor_id: caller, 168 | labels, 169 | post_type, 170 | description, 171 | name, 172 | sponsorship_token, 173 | sponsorship_amount, 174 | sponsorship_supervisor, 175 | }; 176 | await createPostSnapshot(context, post_snapshot); 177 | } 178 | } 179 | 180 | async function createDump( 181 | context, 182 | { 183 | receipt_id, 184 | method_name, 185 | block_height, 186 | block_timestamp, 187 | args, 188 | caller, 189 | post_id, 190 | } 191 | ) { 192 | const dump = { 193 | receipt_id, 194 | method_name, 195 | block_height, 196 | block_timestamp, 197 | args, 198 | caller, 199 | post_id, 200 | }; 201 | try { 202 | console.log("Creating a dump..."); 203 | 204 | const mutationData = { 205 | dump, 206 | }; 207 | await context.graphql( 208 | ` 209 | mutation CreateDump($dump: bo_near_devhub_v36_dumps_insert_input!) { 210 | insert_bo_near_devhub_v36_dumps_one( 211 | object: $dump 212 | ) { 213 | receipt_id 214 | } 215 | } 216 | `, 217 | mutationData 218 | ); 219 | console.log( 220 | `Dump ${caller} ${method_name} post ${post_id} has been added to the database` 221 | ); 222 | return null; 223 | } catch (e) { 224 | console.log( 225 | `Error creating ${caller} ${method_name} post ${post_id}: ${e}` 226 | ); 227 | return e; 228 | } 229 | } 230 | 231 | async function createPost(context, { id, parent_id, author_id }) { 232 | const post = { id, parent_id, author_id }; 233 | try { 234 | console.log("Creating a Post"); 235 | const mutationData = { 236 | post, 237 | }; 238 | await context.graphql( 239 | ` 240 | mutation CreatePost($post: bo_near_devhub_v36_posts_insert_input!) { 241 | insert_bo_near_devhub_v36_posts_one(object: $post) {id} 242 | } 243 | `, 244 | mutationData 245 | ); 246 | console.log(`Post ${id} has been added to the database`); 247 | return null; 248 | } catch (e) { 249 | console.log(`Error creating Post with post_id ${id}: ${e}`); 250 | return e; 251 | } 252 | } 253 | 254 | async function createPostSnapshot( 255 | context, 256 | { 257 | post_id, 258 | block_height, 259 | ts, 260 | editor_id, 261 | labels, 262 | post_type, 263 | description, 264 | name, 265 | sponsorship_token, 266 | sponsorship_amount, 267 | sponsorship_supervisor, 268 | } 269 | ) { 270 | const post_snapshot = { 271 | post_id, 272 | block_height, 273 | ts, 274 | editor_id, 275 | labels, 276 | post_type, 277 | description, 278 | name, 279 | sponsorship_token: JSON.stringify(sponsorship_token), 280 | sponsorship_amount, 281 | sponsorship_supervisor, 282 | }; 283 | try { 284 | console.log("Creating a PostSnapshot"); 285 | const mutationData = { 286 | post_snapshot, 287 | }; 288 | await context.graphql( 289 | ` 290 | mutation CreatePostSnapshot($post_snapshot: bo_near_devhub_v36_post_snapshots_insert_input!) { 291 | insert_bo_near_devhub_v36_post_snapshots_one(object: $post_snapshot) {post_id, block_height} 292 | } 293 | `, 294 | mutationData 295 | ); 296 | console.log( 297 | `Post Snapshot with post_id ${post_id} at block_height ${block_height} has been added to the database` 298 | ); 299 | return null; 300 | } catch (e) { 301 | console.log( 302 | `Error creating Post Snapshot with post_id ${post_id} at block_height ${block_height}: ${e}` 303 | ); 304 | return e; 305 | } 306 | } 307 | 308 | async function createLike(context, { post_id, author_id, ts }) { 309 | try { 310 | console.log("Creating a Like"); 311 | const mutationData = { 312 | author_id, 313 | post_id, 314 | ts, 315 | }; 316 | await context.graphql( 317 | ` 318 | mutation CreateLike($author_id: String, $post_id: Int, $ts: numeric) { 319 | insert_bo_near_devhub_v36_likes_one( 320 | on_conflict: {constraint: likes_pkey, update_columns: ts, where: {ts: {_lt: $ts}}} 321 | object: {post_id: $post_id, ts: $ts, author_id: $author_id} 322 | ) { 323 | author_id 324 | post_id 325 | ts 326 | } 327 | } 328 | `, 329 | mutationData 330 | ); 331 | console.log( 332 | `Like ${post_id} by ${author_id} has been added to the database` 333 | ); 334 | return null; 335 | } catch (e) { 336 | console.log( 337 | `Error creating Like to post_id ${post_id} by ${author_id}: ${e}` 338 | ); 339 | return e; 340 | } 341 | } 342 | -------------------------------------------------------------------------------- /oldPosts.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "post_version": "V0", 4 | "id": 0, 5 | "author_id": "devgovgigs.near", 6 | "likes": [ 7 | { 8 | "author_id": "nearmax.near", 9 | "timestamp": "1675118252956252634" 10 | }, 11 | { 12 | "author_id": "devgovgigs.near", 13 | "timestamp": "1670549268901714422" 14 | }, 15 | { 16 | "author_id": "f.bo.near", 17 | "timestamp": "1678342727635360697" 18 | }, 19 | { 20 | "author_id": "bo.near", 21 | "timestamp": "1673237422980654507" 22 | } 23 | ], 24 | "snapshot": { 25 | "editor_id": "nearmax.near", 26 | "timestamp": "1676311070851102274", 27 | "labels": [ 28 | "test" 29 | ], 30 | "post_type": "Idea", 31 | "idea_version": "V1", 32 | "name": "This is a test idea", 33 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 34 | }, 35 | "snapshot_history": [ 36 | { 37 | "editor_id": "devgovgigs.near", 38 | "timestamp": "1670548064249728240", 39 | "labels": [], 40 | "post_type": "Idea", 41 | "idea_version": "V1", 42 | "name": "This is a test idea", 43 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 44 | }, 45 | { 46 | "editor_id": "devgovgigs.near", 47 | "timestamp": "1672886941971940165", 48 | "labels": [], 49 | "post_type": "Idea", 50 | "idea_version": "V1", 51 | "name": "This is a test idea", 52 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 53 | }, 54 | { 55 | "editor_id": "devgovgigs.near", 56 | "timestamp": "1672887281973973417", 57 | "labels": [ 58 | "test" 59 | ], 60 | "post_type": "Idea", 61 | "idea_version": "V1", 62 | "name": "This is a test idea", 63 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 64 | }, 65 | { 66 | "editor_id": "nearmax.near", 67 | "timestamp": "1675900010923992417", 68 | "labels": [ 69 | "test", 70 | "funding-requested" 71 | ], 72 | "post_type": "Idea", 73 | "idea_version": "V1", 74 | "name": "This is a test idea", 75 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 76 | }, 77 | { 78 | "editor_id": "nearmax.near", 79 | "timestamp": "1675900043118949363", 80 | "labels": [ 81 | "funding", 82 | "test", 83 | "funding-requested" 84 | ], 85 | "post_type": "Idea", 86 | "idea_version": "V1", 87 | "name": "This is a test idea", 88 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 89 | }, 90 | { 91 | "editor_id": "nearmax.near", 92 | "timestamp": "1675900354128994548", 93 | "labels": [ 94 | "test", 95 | "funding", 96 | "funding-invoice-instructions-provided" 97 | ], 98 | "post_type": "Idea", 99 | "idea_version": "V1", 100 | "name": "This is a test idea", 101 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 102 | }, 103 | { 104 | "editor_id": "nearmax.near", 105 | "timestamp": "1675900836779271674", 106 | "labels": [ 107 | "funding", 108 | "test", 109 | "funding-provided" 110 | ], 111 | "post_type": "Idea", 112 | "idea_version": "V1", 113 | "name": "This is a test idea", 114 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 115 | }, 116 | { 117 | "editor_id": "ajeon.near", 118 | "timestamp": "1675986270635858317", 119 | "labels": [ 120 | "test", 121 | "funding-requested", 122 | "funding" 123 | ], 124 | "post_type": "Idea", 125 | "idea_version": "V1", 126 | "name": "This is a test idea", 127 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 128 | }, 129 | { 130 | "editor_id": "ajeon.near", 131 | "timestamp": "1675986297486907956", 132 | "labels": [ 133 | "test", 134 | "funding-provided", 135 | "funding" 136 | ], 137 | "post_type": "Idea", 138 | "idea_version": "V1", 139 | "name": "This is a test idea", 140 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 141 | } 142 | ], 143 | "parent_id": null 144 | }, 145 | { 146 | "post_version": "V0", 147 | "id": 1, 148 | "author_id": "devgovgigs.near", 149 | "likes": [], 150 | "snapshot": { 151 | "editor_id": "devgovgigs.near", 152 | "timestamp": "1670548085712206259", 153 | "labels": [], 154 | "post_type": "Solution", 155 | "solution_version": "V1", 156 | "name": "This is a test submission", 157 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 158 | }, 159 | "snapshot_history": [], 160 | "parent_id": 0 161 | }, 162 | { 163 | "post_version": "V0", 164 | "id": 2, 165 | "author_id": "devgovgigs.near", 166 | "likes": [], 167 | "snapshot": { 168 | "editor_id": "devgovgigs.near", 169 | "timestamp": "1670548122541711582", 170 | "labels": [], 171 | "post_type": "Sponsorship", 172 | "sponsorship_version": "V1", 173 | "name": "This is a test sponsorship", 174 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", 175 | "sponsorship_token": "NEAR", 176 | "amount": "100", 177 | "supervisor": "mob.near" 178 | }, 179 | "snapshot_history": [], 180 | "parent_id": 1 181 | }, 182 | { 183 | "post_version": "V0", 184 | "id": 3, 185 | "author_id": "devgovgigs.near", 186 | "likes": [ 187 | { 188 | "author_id": "devgovgigs.near", 189 | "timestamp": "1670550872396671133" 190 | }, 191 | { 192 | "author_id": "simonemelanie.near", 193 | "timestamp": "1671383466560621144" 194 | }, 195 | { 196 | "author_id": "nearmax.near", 197 | "timestamp": "1670566720094365078" 198 | } 199 | ], 200 | "snapshot": { 201 | "editor_id": "devgovgigs.near", 202 | "timestamp": "1672942502435734657", 203 | "labels": [ 204 | "feature-request", 205 | "gigs-board", 206 | "developer-governance" 207 | ], 208 | "post_type": "Idea", 209 | "idea_version": "V1", 210 | "name": "Make likes, comments, submission, sponsorship appear in the notifications feed", 211 | "description": "It would be great if when person receives a like or a comment to their idea/submission/sponsorship they saw a notification in the top-right corner (the bell) of the near.social website. Similarly it would be great to notify someone who submitted an idea when someone submitted a solution to it, or when someone decided to sponsor a specific solution. Note, that this \"Gigs Board\" stores all of its data in its own smart contract (https://github.com/near/devgigsboard). If we need to use SocialDB to interop with the notification system then it is okay to use SocialDB, but only as a duplication of the data stored in the smart contract itself." 212 | }, 213 | "snapshot_history": [ 214 | { 215 | "editor_id": "devgovgigs.near", 216 | "timestamp": "1670549593228406221", 217 | "labels": [], 218 | "post_type": "Idea", 219 | "idea_version": "V1", 220 | "name": "Make likes, comments, submission, sponsorship appear in the notifications feed", 221 | "description": "It would be great if when person receives a like or a comment to their idea/submission/sponsorship they saw a notification in the top-right corner (the bell) of the near.social website. Similarly it would be great to notify someone who submitted an idea when someone submitted a solution to it, or when someone decided to sponsor a specific solution. Note, that this \"Gigs Board\" stores all of its data in its own smart contract (https://github.com/near/devgigsboard). If we need to use SocialDB to interop with the notification system then it is okay to use SocialDB, but only as a duplication of the data stored in the smart contract itself." 222 | } 223 | ], 224 | "parent_id": null 225 | }, 226 | { 227 | "post_version": "V0", 228 | "id": 4, 229 | "author_id": "devgovgigs.near", 230 | "likes": [ 231 | { 232 | "author_id": "arizas.near", 233 | "timestamp": "1688122500514208122" 234 | }, 235 | { 236 | "author_id": "nearmax.near", 237 | "timestamp": "1670566703937641110" 238 | }, 239 | { 240 | "author_id": "blaze.near", 241 | "timestamp": "1671059068876057888" 242 | }, 243 | { 244 | "author_id": "devgovgigs.near", 245 | "timestamp": "1670551180057665750" 246 | }, 247 | { 248 | "author_id": "partners.learnclub.near", 249 | "timestamp": "1670948485660759741" 250 | }, 251 | { 252 | "author_id": "toolipse.near", 253 | "timestamp": "1672904780607445354" 254 | } 255 | ], 256 | "snapshot": { 257 | "editor_id": "devgovgigs.near", 258 | "timestamp": "1672942569372945464", 259 | "labels": [ 260 | "feature-request", 261 | "gigs-board", 262 | "resolved", 263 | "developer-governance" 264 | ], 265 | "post_type": "Idea", 266 | "idea_version": "V1", 267 | "name": "Allow rich formatting, especially attaching images", 268 | "description": "Right now the body/description of the ideas, submissions, sponsorships, and comments is a plain non-formatted text. There is already a strong need in attaching screenshots for front-end development and design ideas. However, it would be even better if we allowed markdown formatting. I don't have any specific ideas where someone would host the attached images, but probably not in the contract state itself." 269 | }, 270 | "snapshot_history": [ 271 | { 272 | "editor_id": "devgovgigs.near", 273 | "timestamp": "1670551150523931940", 274 | "labels": [], 275 | "post_type": "Idea", 276 | "idea_version": "V1", 277 | "name": "Allow rich formatting, especially attaching images", 278 | "description": "Right now the body/description of the ideas, submissions, sponsorships, and comments is a plain non-formatted text. There is already a strong need in attaching screenshots for front-end development and design ideas. However, it would be even better if we allowed markdown formatting. I don't have any specific ideas where someone would host the attached images, but probably not in the contract state itself." 279 | } 280 | ], 281 | "parent_id": null 282 | }, 283 | { 284 | "post_version": "V0", 285 | "id": 5, 286 | "author_id": "root.near", 287 | "likes": [ 288 | { 289 | "author_id": "blaze.near", 290 | "timestamp": "1671059131557261347" 291 | }, 292 | { 293 | "author_id": "devgovgigs.near", 294 | "timestamp": "1671234319604052895" 295 | }, 296 | { 297 | "author_id": "frol.near", 298 | "timestamp": "1671455963840326949" 299 | } 300 | ], 301 | "snapshot": { 302 | "editor_id": "root.near", 303 | "timestamp": "1670589272856780285", 304 | "labels": [], 305 | "post_type": "Solution", 306 | "solution_version": "V1", 307 | "name": "Solution", 308 | "description": "Just use in the implementation similar to https://near.social/#/mob.near/widget/WidgetSource?src=root.near/widget/BlogEntry. It will out of the box allow to attach images via url.\n\nGoing forward social will need a markdown editor can support uploading images to IPFS." 309 | }, 310 | "snapshot_history": [], 311 | "parent_id": 4 312 | }, 313 | { 314 | "post_version": "V0", 315 | "id": 6, 316 | "author_id": "devgovgigs.near", 317 | "likes": [], 318 | "snapshot": { 319 | "editor_id": "devgovgigs.near", 320 | "timestamp": "1670893421978566471", 321 | "labels": [], 322 | "post_type": "Comment", 323 | "comment_version": "V2", 324 | "description": "#### Test comment\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 325 | }, 326 | "snapshot_history": [], 327 | "parent_id": 1 328 | }, 329 | { 330 | "post_version": "V0", 331 | "id": 7, 332 | "author_id": "devgovgigs.near", 333 | "likes": [ 334 | { 335 | "author_id": "superposition.near", 336 | "timestamp": "1677613094548207720" 337 | } 338 | ], 339 | "snapshot": { 340 | "editor_id": "devgovgigs.near", 341 | "timestamp": "1670895975735242566", 342 | "labels": [], 343 | "post_type": "Comment", 344 | "comment_version": "V2", 345 | "description": "#### Test comment 2\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 346 | }, 347 | "snapshot_history": [], 348 | "parent_id": 1 349 | }, 350 | { 351 | "post_version": "V0", 352 | "id": 8, 353 | "author_id": "devgovgigs.near", 354 | "likes": [], 355 | "snapshot": { 356 | "editor_id": "devgovgigs.near", 357 | "timestamp": "1670898410908414474", 358 | "labels": [], 359 | "post_type": "Comment", 360 | "comment_version": "V2", 361 | "description": "#### Test comment 3\n\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 362 | }, 363 | "snapshot_history": [], 364 | "parent_id": 7 365 | }, 366 | { 367 | "post_version": "V0", 368 | "id": 9, 369 | "author_id": "urbanite.near", 370 | "likes": [], 371 | "snapshot": { 372 | "editor_id": "urbanite.near", 373 | "timestamp": "1670957461499235272", 374 | "labels": [], 375 | "post_type": "Comment", 376 | "comment_version": "V2", 377 | "description": "*Love* this markdown support! ![Love](https://i.guim.co.uk/img/media/bdf23d7b1bbb200cf72ae0c22f051bf926445b20/1_0_5075_3046/master/5075.jpg?width=1200&height=900&quality=85&auto=format&fit=crop&s=c54061a8d861b798e85e896465abec73)" 378 | }, 379 | "snapshot_history": [], 380 | "parent_id": 4 381 | }, 382 | { 383 | "post_version": "V0", 384 | "id": 10, 385 | "author_id": "devgovgigs.near", 386 | "likes": [], 387 | "snapshot": { 388 | "editor_id": "devgovgigs.near", 389 | "timestamp": "1670984425458022156", 390 | "labels": [], 391 | "post_type": "Attestation", 392 | "attestation_version": "V1", 393 | "name": "Test 1", 394 | "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 395 | }, 396 | "snapshot_history": [], 397 | "parent_id": 1 398 | }, 399 | { 400 | "post_version": "V0", 401 | "id": 11, 402 | "author_id": "bo.near", 403 | "likes": [ 404 | { 405 | "author_id": "devgovgigs.near", 406 | "timestamp": "1671211307794807624" 407 | } 408 | ], 409 | "snapshot": { 410 | "editor_id": "devgovgigs.near", 411 | "timestamp": "1672942748130318214", 412 | "labels": [ 413 | "feature-request", 414 | "js", 415 | "near-sdk-js", 416 | "javascript" 417 | ], 418 | "post_type": "Idea", 419 | "idea_version": "V1", 420 | "name": "near-sdk-js UnorderedMap Should Have a Way to Return Keys", 421 | "description": "Developers have troubles to find to only iterate only keys. There is only APIs to return key values, in some case, values are big and it's inefficient to load if they only need keys. " 422 | }, 423 | "snapshot_history": [ 424 | { 425 | "editor_id": "bo.near", 426 | "timestamp": "1671158661817472721", 427 | "labels": [], 428 | "post_type": "Idea", 429 | "idea_version": "V1", 430 | "name": "near-sdk-js UnorderedMap Should Have a Way to Return Keys", 431 | "description": "Developers have troubles to find to only iterate only keys. There is only APIs to return key values, in some case, values are big and it's inefficient to load if they only need keys. " 432 | } 433 | ], 434 | "parent_id": null 435 | }, 436 | { 437 | "post_version": "V0", 438 | "id": 12, 439 | "author_id": "bo.near", 440 | "likes": [ 441 | { 442 | "author_id": "devgovgigs.near", 443 | "timestamp": "1671234843004686102" 444 | } 445 | ], 446 | "snapshot": { 447 | "editor_id": "bo.near", 448 | "timestamp": "1671158748701274932", 449 | "labels": [], 450 | "post_type": "Solution", 451 | "solution_version": "V1", 452 | "name": "Make a separate API to iterate keys", 453 | "description": "" 454 | }, 455 | "snapshot_history": [], 456 | "parent_id": 11 457 | }, 458 | { 459 | "post_version": "V0", 460 | "id": 13, 461 | "author_id": "bo.near", 462 | "likes": [ 463 | { 464 | "author_id": "devgovgigs.near", 465 | "timestamp": "1671234333116698591" 466 | } 467 | ], 468 | "snapshot": { 469 | "editor_id": "devgovgigs.near", 470 | "timestamp": "1672942624144580392", 471 | "labels": [ 472 | "feature-request", 473 | "widget" 474 | ], 475 | "post_type": "Idea", 476 | "idea_version": "V1", 477 | "name": "Some short user ex enhancement suggests on IdeasList", 478 | "description": "- after submit an idea, redirect to IdeasList. Currently it stays at AddIdea.\n- Add a function call access key with some allowance to devgovgigs.near contract, so it doesn't have to redirect to wallet everytime to add_idea\n- display ideas from newest to oldest (reverse of current order)\n" 479 | }, 480 | "snapshot_history": [ 481 | { 482 | "editor_id": "bo.near", 483 | "timestamp": "1671158917788917517", 484 | "labels": [], 485 | "post_type": "Idea", 486 | "idea_version": "V1", 487 | "name": "Some short user ex enhancement suggests on IdeasList", 488 | "description": "- after submit an idea, redirect to IdeasList. Currently it stays at AddIdea.\n- Add a function call access key with some allowance to devgovgigs.near contract, so it doesn't have to redirect to wallet everytime to add_idea\n- display ideas from newest to oldest (reverse of current order)\n" 489 | } 490 | ], 491 | "parent_id": null 492 | }, 493 | { 494 | "post_version": "V0", 495 | "id": 14, 496 | "author_id": "bo.near", 497 | "likes": [ 498 | { 499 | "author_id": "devgovgigs.near", 500 | "timestamp": "1671211277622703151" 501 | }, 502 | { 503 | "author_id": "nearmax.near", 504 | "timestamp": "1671208175577964339" 505 | } 506 | ], 507 | "snapshot": { 508 | "editor_id": "devgovgigs.near", 509 | "timestamp": "1672942870692952906", 510 | "labels": [ 511 | "near-sdk-js", 512 | "js", 513 | "release", 514 | "javascript" 515 | ], 516 | "post_type": "Comment", 517 | "comment_version": "V2", 518 | "description": "### Status update for moving out of Alpha for near-sdk-js\nFrom David Millar-Durrant:\nSo there are two streams of work going on to reach 1.0.\n\nThe first is API stability, we want to rework the API a bit because some parts are a little finicky to work with and we don't have complete APIs for certain contract interfaces. We're not too far off completing that.\n\nThe second string of work is improving the correctness of QuickJS, the library we use to run JS in contracts. We've run into some issues there so we've hired some compiler/interpreter experts to vet and improve it. They're just starting work now, when they're happy with the quality of the code we'll move this into beta. I'll post an estimate on how long that will take after they've gotten stuck into the code.\n\nAfter that auditors will give the code one more pass and then we can move it from beta to release. This will probably take another 6-8 weeks." 519 | }, 520 | "snapshot_history": [ 521 | { 522 | "editor_id": "bo.near", 523 | "timestamp": "1671159084871489028", 524 | "labels": [], 525 | "post_type": "Idea", 526 | "idea_version": "V1", 527 | "name": "Status update for moving out of Alpha for near-sdk-js", 528 | "description": "From David Millar-Durrant:\nSo there are two streams of work going on to reach 1.0.\n\nThe first is API stability, we want to rework the API a bit because some parts are a little finicky to work with and we don't have complete APIs for certain contract interfaces. We're not too far off completing that.\n\nThe second string of work is improving the correctness of QuickJS, the library we use to run JS in contracts. We've run into some issues there so we've hired some compiler/interpreter experts to vet and improve it. They're just starting work now, when they're happy with the quality of the code we'll move this into beta. I'll post an estimate on how long that will take after they've gotten stuck into the code.\n\nAfter that auditors will give the code one more pass and then we can move it from beta to release. This will probably take another 6-8 weeks." 529 | } 530 | ], 531 | "parent_id": null 532 | }, 533 | { 534 | "post_version": "V0", 535 | "id": 15, 536 | "author_id": "bo.near", 537 | "likes": [ 538 | { 539 | "author_id": "devgovgigs.near", 540 | "timestamp": "1671225636444087879" 541 | } 542 | ], 543 | "snapshot": { 544 | "editor_id": "bo.near", 545 | "timestamp": "1671159316576430363", 546 | "labels": [], 547 | "post_type": "Solution", 548 | "solution_version": "V1", 549 | "name": "For API stability, it is done", 550 | "description": "Recently, we finalized the last API regarding handle utf-8 encoding and raw bytes in state, contract arguments and value returns: https://github.com/near/near-sdk-js/pull/308. There is no breaking changes in roadmap to 1.0." 551 | }, 552 | "snapshot_history": [], 553 | "parent_id": 14 554 | }, 555 | { 556 | "post_version": "V0", 557 | "id": 16, 558 | "author_id": "bo.near", 559 | "likes": [ 560 | { 561 | "author_id": "devgovgigs.near", 562 | "timestamp": "1671211293330212926" 563 | }, 564 | { 565 | "author_id": "nearmax.near", 566 | "timestamp": "1671208186797114873" 567 | } 568 | ], 569 | "snapshot": { 570 | "editor_id": "bo.near", 571 | "timestamp": "1671159717008331198", 572 | "labels": [], 573 | "post_type": "Solution", 574 | "solution_version": "V1", 575 | "name": "For correctness of QuickJS, it has great progress", 576 | "description": "From Alexandr Esilevich:\nHi, I have an update regarding the BigNum library in quickjs.\nAfter some research, I've found the Boost.multiprecision library. This is a highly customizable library for big integer/float arithmetics which has a lot of tests.\nI've created (very limited) customization for the libbf library and ran part of the tests from the Boost.multiprecision test suite (basic arithmetics tests and a bunch of tests for pow and acos functions). I've tested x86_64/x86/webassembly targets.\nThe libbf library passed all tests I've checked, except of some specialized tests for the Boost.multiprecision library. So I don't think the libbf is very buggy or is not usable at all.\nI suggest rewriting part of Boost.multiprecision tests in javascript using the BigFloat class. It should not be hard because Boost.multiprecision library contains tests for a generic library. There are several big arrays of strings containing arguments and results, and we should just parse strings, execute an operation, and check relative error from the expected result.\nI think it will be good step for making the BigFloat library more stable. We can push our tests upstream, and they will be accepted almost for sure because it's better to have tests than not. After that, if we decide to replace the libbf library with something else (libgmp/libmpfr for example) then we will have a good test suite for integration with the new library." 577 | }, 578 | "snapshot_history": [], 579 | "parent_id": 14 580 | }, 581 | { 582 | "post_version": "V0", 583 | "id": 17, 584 | "author_id": "bo.near", 585 | "likes": [ 586 | { 587 | "author_id": "devgovgigs.near", 588 | "timestamp": "1671211267174319114" 589 | }, 590 | { 591 | "author_id": "nearmax.near", 592 | "timestamp": "1671208134087446834" 593 | } 594 | ], 595 | "snapshot": { 596 | "editor_id": "devgovgigs.near", 597 | "timestamp": "1672942913300415905", 598 | "labels": [ 599 | "gigs-board", 600 | "resolved", 601 | "developer-governance" 602 | ], 603 | "post_type": "Idea", 604 | "idea_version": "V1", 605 | "name": "Allow edit an idea and submission", 606 | "description": "I made mistake in formatting my submission, but currently it doesn't allow edit after submit" 607 | }, 608 | "snapshot_history": [ 609 | { 610 | "editor_id": "bo.near", 611 | "timestamp": "1671159845064430031", 612 | "labels": [], 613 | "post_type": "Idea", 614 | "idea_version": "V1", 615 | "name": "Allow edit an idea and submission", 616 | "description": "I made mistake in formatting my submission, but currently it doesn't allow edit after submit" 617 | }, 618 | { 619 | "editor_id": "devgovgigs.near", 620 | "timestamp": "1672942303188231891", 621 | "labels": [ 622 | "resolved" 623 | ], 624 | "post_type": "Idea", 625 | "idea_version": "V1", 626 | "name": "Allow edit an idea and submission", 627 | "description": "I made mistake in formatting my submission, but currently it doesn't allow edit after submit" 628 | } 629 | ], 630 | "parent_id": null 631 | }, 632 | { 633 | "post_version": "V0", 634 | "id": 18, 635 | "author_id": "nearmax.near", 636 | "likes": [], 637 | "snapshot": { 638 | "editor_id": "nearmax.near", 639 | "timestamp": "1671238550084888901", 640 | "labels": [], 641 | "post_type": "Comment", 642 | "comment_version": "V2", 643 | "description": "So is this being currently worked on by Alexandr?" 644 | }, 645 | "snapshot_history": [], 646 | "parent_id": 16 647 | }, 648 | { 649 | "post_version": "V0", 650 | "id": 19, 651 | "author_id": "nearmax.near", 652 | "likes": [ 653 | { 654 | "author_id": "bo.near", 655 | "timestamp": "1671421164908167373" 656 | } 657 | ], 658 | "snapshot": { 659 | "editor_id": "nearmax.near", 660 | "timestamp": "1671238852511783326", 661 | "labels": [], 662 | "post_type": "Solution", 663 | "solution_version": "V1", 664 | "name": "Edit, History, and Moderation will be added shortly", 665 | "description": "We have thought through the architecture of the smart contract and the front-end to support edit, history, and moderation of the posts. We just did not get around to implement it. ETA by Nov 23. Note though that Gigs board is intentionally append-only, so all history of changes will be preserved and easily accessible." 666 | }, 667 | "snapshot_history": [], 668 | "parent_id": 17 669 | }, 670 | { 671 | "post_version": "V0", 672 | "id": 20, 673 | "author_id": "ilerik.near", 674 | "likes": [ 675 | { 676 | "author_id": "nearmax.near", 677 | "timestamp": "1671298085412818198" 678 | }, 679 | { 680 | "author_id": "sergantche_dev.near", 681 | "timestamp": "1673608785700357568" 682 | }, 683 | { 684 | "author_id": "legard.near", 685 | "timestamp": "1671480131978926405" 686 | }, 687 | { 688 | "author_id": "bo.near", 689 | "timestamp": "1671421110106152402" 690 | }, 691 | { 692 | "author_id": "ilerik.near", 693 | "timestamp": "1671281611742000938" 694 | }, 695 | { 696 | "author_id": "meta_irony.near", 697 | "timestamp": "1673547546406532882" 698 | }, 699 | { 700 | "author_id": "devgovgigs.near", 701 | "timestamp": "1671469126866540968" 702 | }, 703 | { 704 | "author_id": "bratandronik235711.near", 705 | "timestamp": "1671282077175916417" 706 | }, 707 | { 708 | "author_id": "luluca_l.near", 709 | "timestamp": "1671360947810896994" 710 | } 711 | ], 712 | "snapshot": { 713 | "editor_id": "devgovgigs.near", 714 | "timestamp": "1672943159156736948", 715 | "labels": [ 716 | "proposal", 717 | "kyc", 718 | "near-social", 719 | "nft", 720 | "sbt", 721 | "integration" 722 | ], 723 | "post_type": "Idea", 724 | "idea_version": "V1", 725 | "name": "Integration proposal by vSelf", 726 | "description": "[vRanda](https://vself.app/vranda) & Near.Social integration: a user-friendly interface that allows creating Web3 profiles with on-chain data. \n\nFunctionality: \n- SBT/NFT collection layout custom built and controlled by the user. Data is synced using [The Graph Protocol](https://thegraph.com/) NEAR subgraph.\n- Personal data (name, bio) & avatar, social graph & subscriptions are imported from Near.Social.\n- Verification by [Verisoul](https://www.verisoul.xyz/) provides the proofed user status in the vRanda interface.\n\nTechnically we want to: \n- Build a widget integrated with Verisoul that publishes verification confirmation on-chain in Near.SocialDB under users account and displays it in public profile.\n- Integrate new Near.Social functionality into vRanda public pages.\n- Maintain on-chain index for vSelf community inside Near.SocialDB and an SBT minting contract.\n" 727 | }, 728 | "snapshot_history": [ 729 | { 730 | "editor_id": "ilerik.near", 731 | "timestamp": "1671281588900878625", 732 | "labels": [], 733 | "post_type": "Idea", 734 | "idea_version": "V1", 735 | "name": "Integration proposal by vSelf", 736 | "description": "[vRanda](https://vself.app/vranda) & Near.Social integration: a user-friendly interface that allows creating Web3 profiles with on-chain data. \n\nFunctionality: \n- SBT/NFT collection layout custom built and controlled by the user. Data is synced using [The Graph Protocol](https://thegraph.com/) NEAR subgraph.\n- Personal data (name, bio) & avatar, social graph & subscriptions are imported from Near.Social.\n- Verification by [Verisoul](https://www.verisoul.xyz/) provides the proofed user status in the vRanda interface.\n\nTechnically we want to: \n- Build a widget integrated with Verisoul that publishes verification confirmation on-chain in Near.SocialDB under users account and displays it in public profile.\n- Integrate new Near.Social functionality into vRanda public pages.\n- Maintain on-chain index for vSelf community inside Near.SocialDB and an SBT minting contract.\n" 737 | }, 738 | { 739 | "editor_id": "devgovgigs.near", 740 | "timestamp": "1672943025129285471", 741 | "labels": [ 742 | "integration", 743 | "kyc", 744 | "near-social", 745 | "proposal" 746 | ], 747 | "post_type": "Idea", 748 | "idea_version": "V1", 749 | "name": "Integration proposal by vSelf", 750 | "description": "[vRanda](https://vself.app/vranda) & Near.Social integration: a user-friendly interface that allows creating Web3 profiles with on-chain data. \n\nFunctionality: \n- SBT/NFT collection layout custom built and controlled by the user. Data is synced using [The Graph Protocol](https://thegraph.com/) NEAR subgraph.\n- Personal data (name, bio) & avatar, social graph & subscriptions are imported from Near.Social.\n- Verification by [Verisoul](https://www.verisoul.xyz/) provides the proofed user status in the vRanda interface.\n\nTechnically we want to: \n- Build a widget integrated with Verisoul that publishes verification confirmation on-chain in Near.SocialDB under users account and displays it in public profile.\n- Integrate new Near.Social functionality into vRanda public pages.\n- Maintain on-chain index for vSelf community inside Near.SocialDB and an SBT minting contract.\n" 751 | } 752 | ], 753 | "parent_id": null 754 | }, 755 | { 756 | "post_version": "V0", 757 | "id": 21, 758 | "author_id": "nearmax.near", 759 | "likes": [ 760 | { 761 | "author_id": "vself.near", 762 | "timestamp": "1671377261468268825" 763 | }, 764 | { 765 | "author_id": "ilerik.near", 766 | "timestamp": "1671347594457418895" 767 | } 768 | ], 769 | "snapshot": { 770 | "editor_id": "nearmax.near", 771 | "timestamp": "1671299106073816834", 772 | "labels": [], 773 | "post_type": "Comment", 774 | "comment_version": "V2", 775 | "description": "Thank you for the submission! A couple of clarification questions:\n* Is vSelf developing under past or ongoing NEAR Foundation grant/investment?\n* Does it support any SBT contract or only SBT the one created and controlled by vSelf?\n* Will it support KYC and who is going to be a provider?\n" 776 | }, 777 | "snapshot_history": [], 778 | "parent_id": 20 779 | }, 780 | { 781 | "post_version": "V0", 782 | "id": 22, 783 | "author_id": "vself.near", 784 | "likes": [ 785 | { 786 | "author_id": "nearmax.near", 787 | "timestamp": "1671402592396910879" 788 | }, 789 | { 790 | "author_id": "ilerik.near", 791 | "timestamp": "1671396067755687723" 792 | } 793 | ], 794 | "snapshot": { 795 | "editor_id": "vself.near", 796 | "timestamp": "1671395017064727333", 797 | "labels": [], 798 | "post_type": "Comment", 799 | "comment_version": "V2", 800 | "description": "@nearmax.near\n- The initial MVP was supported by Human Guild until July 22 (here is the report https://gov.near.org/t/report-mvp-for-vself-web3-identity-wallet/27420). \n- It does support any tokens that follow the NEAR NFT standard. The only restriction so far is the complexity of the file associated (e.g., animations are not there yet, but are planned further on the roadmap). \n- We plan to start with proof-of-humanity through the Verisoul solution. If there is a particular KYC procedure in demand in the community (e.g., by Netverify), we will consider integrating it. " 801 | }, 802 | "snapshot_history": [], 803 | "parent_id": 21 804 | }, 805 | { 806 | "post_version": "V0", 807 | "id": 23, 808 | "author_id": "nearmax.near", 809 | "likes": [ 810 | { 811 | "author_id": "ilerik.near", 812 | "timestamp": "1671514201843218725" 813 | } 814 | ], 815 | "snapshot": { 816 | "editor_id": "nearmax.near", 817 | "timestamp": "1671402798794818451", 818 | "labels": [], 819 | "post_type": "Comment", 820 | "comment_version": "V2", 821 | "description": "Do we know if AstroDAO is planning on integrating KYC? For Developer Governance DAO it would be really great if either near.social profiles displayed some form of KYC or it was integrated on AstroDAO level." 822 | }, 823 | "snapshot_history": [], 824 | "parent_id": 22 825 | }, 826 | { 827 | "post_version": "V0", 828 | "id": 24, 829 | "author_id": "nembal.near", 830 | "likes": [ 831 | { 832 | "author_id": "devgovgigs.near", 833 | "timestamp": "1671469116722778006" 834 | } 835 | ], 836 | "snapshot": { 837 | "editor_id": "devgovgigs.near", 838 | "timestamp": "1672943266665104940", 839 | "labels": [ 840 | "proposal", 841 | "kyc", 842 | "near-social", 843 | "nft", 844 | "sbt", 845 | "integration" 846 | ], 847 | "post_type": "Idea", 848 | "idea_version": "V1", 849 | "name": "verified badge - using kycDAO", 850 | "description": "\nGoal: \n- allow [near.social](https://near.social/) users to show if they have a trusted verification \n - use kycNFTs as the verification badge (web3 version of the Twitter tick) to ensure that users can trust each other\n- signal that a trusted wallet belongs to someone who is\n - a human\n - not on a sanctions list\n - verified\n- protect wallet-owner privacy. \n\nInfo:\n[kycDAO](https://kycdao.xyz/) is a compliance framework that links verified identities to self-hosted wallets in a privacy-preserving way.\n\nHow: \n- integrate NEAR deployed kycNFTs - [kycDAO soulbound NFTs](https://github.com/kycdao/smart-contracts/tree/main/near/kycdao-ntnft) - to ensure that verifications always belong to the same wallet\n - NFT metadata for badge image \n - NFT validity gating `_is_valid?` at frontend and at optionally at the contract level \n\n- integrate kycDAO UI SDK to [near.social](https://near.social/) and enable users to mint their kycDAO membership proof (kycNFT) after connecting their wallets to a trusted verification provider. \n\nPrivacy: \n- kycNFTs do NOT contain Personal Information. They only represent validity and tier (verification type) information.\n" 851 | }, 852 | "snapshot_history": [ 853 | { 854 | "editor_id": "nembal.near", 855 | "timestamp": "1671406381354377188", 856 | "labels": [], 857 | "post_type": "Idea", 858 | "idea_version": "V1", 859 | "name": "verified badge - using kycDAO", 860 | "description": "\nGoal: \n- allow [near.social](https://near.social/) users to show if they have a trusted verification \n - use kycNFTs as the verification badge (web3 version of the Twitter tick) to ensure that users can trust each other\n- signal that a trusted wallet belongs to someone who is\n - a human\n - not on a sanctions list\n - verified\n- protect wallet-owner privacy. \n\nInfo:\n[kycDAO](https://kycdao.xyz/) is a compliance framework that links verified identities to self-hosted wallets in a privacy-preserving way.\n\nHow: \n- integrate NEAR deployed kycNFTs - [kycDAO soulbound NFTs](https://github.com/kycdao/smart-contracts/tree/main/near/kycdao-ntnft) - to ensure that verifications always belong to the same wallet\n - NFT metadata for badge image \n - NFT validity gating `_is_valid?` at frontend and at optionally at the contract level \n\n- integrate kycDAO UI SDK to [near.social](https://near.social/) and enable users to mint their kycDAO membership proof (kycNFT) after connecting their wallets to a trusted verification provider. \n\nPrivacy: \n- kycNFTs do NOT contain Personal Information. They only represent validity and tier (verification type) information.\n" 861 | }, 862 | { 863 | "editor_id": "devgovgigs.near", 864 | "timestamp": "1672943231569960372", 865 | "labels": [ 866 | "nft", 867 | "sbt", 868 | "kyc", 869 | "near-social", 870 | "proposal" 871 | ], 872 | "post_type": "Idea", 873 | "idea_version": "V1", 874 | "name": "verified badge - using kycDAO", 875 | "description": "\nGoal: \n- allow [near.social](https://near.social/) users to show if they have a trusted verification \n - use kycNFTs as the verification badge (web3 version of the Twitter tick) to ensure that users can trust each other\n- signal that a trusted wallet belongs to someone who is\n - a human\n - not on a sanctions list\n - verified\n- protect wallet-owner privacy. \n\nInfo:\n[kycDAO](https://kycdao.xyz/) is a compliance framework that links verified identities to self-hosted wallets in a privacy-preserving way.\n\nHow: \n- integrate NEAR deployed kycNFTs - [kycDAO soulbound NFTs](https://github.com/kycdao/smart-contracts/tree/main/near/kycdao-ntnft) - to ensure that verifications always belong to the same wallet\n - NFT metadata for badge image \n - NFT validity gating `_is_valid?` at frontend and at optionally at the contract level \n\n- integrate kycDAO UI SDK to [near.social](https://near.social/) and enable users to mint their kycDAO membership proof (kycNFT) after connecting their wallets to a trusted verification provider. \n\nPrivacy: \n- kycNFTs do NOT contain Personal Information. They only represent validity and tier (verification type) information.\n" 876 | } 877 | ], 878 | "parent_id": null 879 | }, 880 | { 881 | "post_version": "V0", 882 | "id": 25, 883 | "author_id": "bo.near", 884 | "likes": [], 885 | "snapshot": { 886 | "editor_id": "bo.near", 887 | "timestamp": "1671421298508574120", 888 | "labels": [], 889 | "post_type": "Comment", 890 | "comment_version": "V2", 891 | "description": "The first and the third idea above have been achieved in devgovgigs.near/MyPage. The second idea will still be helpful. And not limited to add_idea, but also `like`, `comment`, etc." 892 | }, 893 | "snapshot_history": [], 894 | "parent_id": 13 895 | }, 896 | { 897 | "post_version": "V0", 898 | "id": 26, 899 | "author_id": "frol.near", 900 | "likes": [ 901 | { 902 | "author_id": "devgovgigs.near", 903 | "timestamp": "1671469105609360774" 904 | } 905 | ], 906 | "snapshot": { 907 | "editor_id": "devgovgigs.near", 908 | "timestamp": "1672943318676721801", 909 | "labels": [ 910 | "community", 911 | "docs", 912 | "developer-governance" 913 | ], 914 | "post_type": "Idea", 915 | "idea_version": "V1", 916 | "name": "Developer Governance Guidelines and Best Practices", 917 | "description": "The idea is to author a document and/or visualization that covers how anyone from the community can participate in any of the stages from early ideation to production and beyond with examples and best practices." 918 | }, 919 | "snapshot_history": [ 920 | { 921 | "editor_id": "frol.near", 922 | "timestamp": "1671456717668773270", 923 | "labels": [], 924 | "post_type": "Idea", 925 | "idea_version": "V1", 926 | "name": "Developer Governance Guidelines and Best Practices", 927 | "description": "The idea is to author a document and/or visualization that covers how anyone from the community can participate in any of the stages from early ideation to production and beyond with examples and best practices." 928 | } 929 | ], 930 | "parent_id": null 931 | }, 932 | { 933 | "post_version": "V0", 934 | "id": 27, 935 | "author_id": "hackerhouse.near", 936 | "likes": [ 937 | { 938 | "author_id": "devgovgigs.near", 939 | "timestamp": "1671556422635961912" 940 | }, 941 | { 942 | "author_id": "rin.akaia.near", 943 | "timestamp": "1675654352703693478" 944 | } 945 | ], 946 | "snapshot": { 947 | "editor_id": "devgovgigs.near", 948 | "timestamp": "1672948352208473191", 949 | "labels": [ 950 | "widget", 951 | "near-social" 952 | ], 953 | "post_type": "Idea", 954 | "idea_version": "V1", 955 | "name": "Job Board", 956 | "description": "Goal\n- create a decentralized Job board anyone can post to\n- Job Title, Description, Experience, Hiring Organization\n- A CRM like trello board that serves as applicant tracking system\n- Ability to set a owner that can setup status of Job (Open, Closed, Fulfilled)\n\nThis is an open idea for anyone to take" 957 | }, 958 | "snapshot_history": [ 959 | { 960 | "editor_id": "hackerhouse.near", 961 | "timestamp": "1671507246942872133", 962 | "labels": [], 963 | "post_type": "Idea", 964 | "idea_version": "V1", 965 | "name": "Job Board", 966 | "description": "Goal\n- create a decentralized Job board anyone can post to\n- Job Title, Description, Experience, Hiring Organization\n- A CRM like trello board that serves as applicant tracking system\n- Ability to set a owner that can setup status of Job (Open, Closed, Fulfilled)\n\nThis is an open idea for anyone to take" 967 | } 968 | ], 969 | "parent_id": null 970 | }, 971 | { 972 | "post_version": "V0", 973 | "id": 28, 974 | "author_id": "hackerhouse.near", 975 | "likes": [ 976 | { 977 | "author_id": "devgovgigs.near", 978 | "timestamp": "1671556412117677207" 979 | }, 980 | { 981 | "author_id": "rin.akaia.near", 982 | "timestamp": "1675654336392563879" 983 | } 984 | ], 985 | "snapshot": { 986 | "editor_id": "devgovgigs.near", 987 | "timestamp": "1672948628267273937", 988 | "labels": [ 989 | "widget", 990 | "near-social" 991 | ], 992 | "post_type": "Idea", 993 | "idea_version": "V1", 994 | "name": "Export Contact List", 995 | "description": "Goal\n- create a widget to easily export contacts. Contact may be defined as friends on NEAR social. A contact may also be previous wallets sent transactions to that also have a NEAR.social profile\n- into a CSV or Json file" 996 | }, 997 | "snapshot_history": [ 998 | { 999 | "editor_id": "hackerhouse.near", 1000 | "timestamp": "1671511708709917896", 1001 | "labels": [], 1002 | "post_type": "Idea", 1003 | "idea_version": "V1", 1004 | "name": "Export Contact List", 1005 | "description": "Goal\n- create a widget to easily export contacts. Contact may be defined as friends on NEAR social. A contact may also be previous wallets sent transactions to that also have a NEAR.social profile\n- into a CSV or Json file" 1006 | } 1007 | ], 1008 | "parent_id": null 1009 | }, 1010 | { 1011 | "post_version": "V0", 1012 | "id": 29, 1013 | "author_id": "hackerhouse.near", 1014 | "likes": [ 1015 | { 1016 | "author_id": "devgovgigs.near", 1017 | "timestamp": "1671556401628009875" 1018 | }, 1019 | { 1020 | "author_id": "rin.akaia.near", 1021 | "timestamp": "1675654135345086374" 1022 | } 1023 | ], 1024 | "snapshot": { 1025 | "editor_id": "devgovgigs.near", 1026 | "timestamp": "1672954269618436793", 1027 | "labels": [ 1028 | "developer-governance", 1029 | "feature-request", 1030 | "gigs-board", 1031 | "near-social", 1032 | "badges", 1033 | "nft", 1034 | "dao" 1035 | ], 1036 | "post_type": "Idea", 1037 | "idea_version": "V1", 1038 | "name": "My DAOs on Profile", 1039 | "description": "Goal\n- Ability to see myDAOs on Profile page to see which DAOs you are a part of\n- Need to standardized DAO contract as NEP for DAOs that aren't through Sputnik contracts\n- Create a DAO page (separate task) and see members by NEAR Social profile -> would be cool to see profiles that aren't on NEAR social and send them an onboard to near.social NFT\n- Ability to see role in subgroups through badges\n\nInspiration \n- DeepDAO.io " 1040 | }, 1041 | "snapshot_history": [ 1042 | { 1043 | "editor_id": "hackerhouse.near", 1044 | "timestamp": "1671511867368874192", 1045 | "labels": [], 1046 | "post_type": "Idea", 1047 | "idea_version": "V1", 1048 | "name": "My DAOs on Profile", 1049 | "description": "Goal\n- Ability to see myDAOs on Profile page to see which DAOs you are a part of\n- Need to standardized DAO contract as NEP for DAOs that aren't through Sputnik contracts\n- Create a DAO page (separate task) and see members by NEAR Social profile -> would be cool to see profiles that aren't on NEAR social and send them an onboard to near.social NFT\n- Ability to see role in subgroups through badges\n\nInspiration \n- DeepDAO.io " 1050 | } 1051 | ], 1052 | "parent_id": null 1053 | }, 1054 | { 1055 | "post_version": "V0", 1056 | "id": 30, 1057 | "author_id": "noak.near", 1058 | "likes": [ 1059 | { 1060 | "author_id": "keyokey.near", 1061 | "timestamp": "1671805424675573370" 1062 | }, 1063 | { 1064 | "author_id": "blaze.near", 1065 | "timestamp": "1671633905929320071" 1066 | }, 1067 | { 1068 | "author_id": "devgovgigs.near", 1069 | "timestamp": "1671571224312635393" 1070 | }, 1071 | { 1072 | "author_id": "hackerhouse.near", 1073 | "timestamp": "1671907155466863724" 1074 | }, 1075 | { 1076 | "author_id": "kenjon.near", 1077 | "timestamp": "1672375255048715064" 1078 | } 1079 | ], 1080 | "snapshot": { 1081 | "editor_id": "devgovgigs.near", 1082 | "timestamp": "1672954354619650330", 1083 | "labels": [ 1084 | "proposal", 1085 | "kyc", 1086 | "near-social", 1087 | "sbt", 1088 | "integration" 1089 | ], 1090 | "post_type": "Idea", 1091 | "idea_version": "V1", 1092 | "name": "Integrate I-am-human SBT with Near.social", 1093 | "description": "allow near.social users to show if they have a trusted verification, using SBTs (Soulbound tokens) from the i-am human.app as the verification badge. This would be a way to ensure that users can trust each other, a signal that a near.social account belongs to someone who is\na human\n\ni-am-human is a compliance framework that links verified identities to wallets in a privacy-preserving way by issuing a variety of SBTs to the wallet and then using logic to specify which combination of SBTs verifies an account as belonging to a human. In the MVP version we are deploying two SBTs, one of which is a face and voice scan and the other is a peer-to-peer validation, and both are required to qualify as a human-verified account. \n\nHow:\n\nIntegrate SBTs deployed to an account on Near with the associated near.social profile - and a the SBT class with a standardized rules - to display a list of SBTs and produce a check mark (like Twitter Blue) if the right combination of SBTs is present and valid. \n\nAllow users to filter and display only accounts that have the check mark, that are human. \n\nAllow apps the optionality to - for example - only allow posting by verified humans, only allow votes by verified humans, etc\n\nPrivacy:\n\ni-am-human.app does not contain any Personally Identifiable Information (PII). The SBTs only represent mint date, validity periodicity and verification type. Plus the account to which it is minted and sometimes can also be traced back to the account of the person that verified you." 1094 | }, 1095 | "snapshot_history": [ 1096 | { 1097 | "editor_id": "noak.near", 1098 | "timestamp": "1671569803738545652", 1099 | "labels": [], 1100 | "post_type": "Idea", 1101 | "idea_version": "V1", 1102 | "name": "Integrate I-am-human SBT with Near.social", 1103 | "description": "allow near.social users to show if they have a trusted verification, using SBTs (Soulbound tokens) from the i-am human.app as the verification badge. This would be a way to ensure that users can trust each other, a signal that a near.social account belongs to someone who is\na human\n\ni-am-human is a compliance framework that links verified identities to wallets in a privacy-preserving way by issuing a variety of SBTs to the wallet and then using logic to specify which combination of SBTs verifies an account as belonging to a human. In the MVP version we are deploying two SBTs, one of which is a face and voice scan and the other is a peer-to-peer validation, and both are required to qualify as a human-verified account. \n\nHow:\n\nIntegrate SBTs deployed to an account on Near with the associated near.social profile - and a the SBT class with a standardized rules - to display a list of SBTs and produce a check mark (like Twitter Blue) if the right combination of SBTs is present and valid. \n\nAllow users to filter and display only accounts that have the check mark, that are human. \n\nAllow apps the optionality to - for example - only allow posting by verified humans, only allow votes by verified humans, etc\n\nPrivacy:\n\ni-am-human.app does not contain any Personally Identifiable Information (PII). The SBTs only represent mint date, validity periodicity and verification type. Plus the account to which it is minted and sometimes can also be traced back to the account of the person that verified you." 1104 | } 1105 | ], 1106 | "parent_id": null 1107 | }, 1108 | { 1109 | "post_version": "V0", 1110 | "id": 31, 1111 | "author_id": "root.near", 1112 | "likes": [], 1113 | "snapshot": { 1114 | "editor_id": "root.near", 1115 | "timestamp": "1671575804916522639", 1116 | "labels": [], 1117 | "post_type": "Comment", 1118 | "comment_version": "V2", 1119 | "description": "Great idea. It doesn't seem like kycDAO is operational though yet, right?\n\nAfter it is going to be live someone should build a component that surfaces a checkmark if given account_id has been verified. Then main Profile component and other sub components can include the component with checkmark.\n\nSeparately would need a component to go through KYC process." 1120 | }, 1121 | "snapshot_history": [], 1122 | "parent_id": 24 1123 | }, 1124 | { 1125 | "post_version": "V0", 1126 | "id": 32, 1127 | "author_id": "djwine_official.near", 1128 | "likes": [ 1129 | { 1130 | "author_id": "aliaksandrh.near", 1131 | "timestamp": "1671745631838744150" 1132 | }, 1133 | { 1134 | "author_id": "arca9.near", 1135 | "timestamp": "1677187941894595609" 1136 | }, 1137 | { 1138 | "author_id": "blaze.near", 1139 | "timestamp": "1673215248702972454" 1140 | }, 1141 | { 1142 | "author_id": "devgovgigs.near", 1143 | "timestamp": "1671648255283919171" 1144 | }, 1145 | { 1146 | "author_id": "kenjon.near", 1147 | "timestamp": "1672375200726473064" 1148 | } 1149 | ], 1150 | "snapshot": { 1151 | "editor_id": "devgovgigs.near", 1152 | "timestamp": "1672954433558047368", 1153 | "labels": [ 1154 | "dashboard", 1155 | "hackathon", 1156 | "social" 1157 | ], 1158 | "post_type": "Idea", 1159 | "idea_version": "V1", 1160 | "name": "Social Graph Explorer", 1161 | "description": "Allow users to explore the decentralized social graph via open data. \n\nSuch a tool will help one answer questions such as:\n- What is the overall structure of the network?\n- Who are the important people, or hubs, in the network?\n- What are the subgroups and communities in the network? \n\nHackathon MVP here: https://widgets-8d2.pages.dev/" 1162 | }, 1163 | "snapshot_history": [ 1164 | { 1165 | "editor_id": "djwine_official.near", 1166 | "timestamp": "1671640074210644712", 1167 | "labels": [], 1168 | "post_type": "Idea", 1169 | "idea_version": "V1", 1170 | "name": "Social Graph Explorer", 1171 | "description": "Allow users to explore the decentralized social graph via open data. \n\nSuch a tool will help one answer questions such as:\n- What is the overall structure of the network?\n- Who are the important people, or hubs, in the network?\n- What are the subgroups and communities in the network? \n\nHackathon MVP here: https://widgets-8d2.pages.dev/" 1172 | } 1173 | ], 1174 | "parent_id": null 1175 | }, 1176 | { 1177 | "post_version": "V0", 1178 | "id": 33, 1179 | "author_id": "silly_psyop.near", 1180 | "likes": [], 1181 | "snapshot": { 1182 | "editor_id": "silly_psyop.near", 1183 | "timestamp": "1671645183552692497", 1184 | "labels": [], 1185 | "post_type": "Comment", 1186 | "comment_version": "V2", 1187 | "description": "Would prefer to use a zkp solution to kyc instead of trusting a DAO with personal data. Something like: https://eprint.iacr.org/2021/907.pdf" 1188 | }, 1189 | "snapshot_history": [], 1190 | "parent_id": 24 1191 | }, 1192 | { 1193 | "post_version": "V0", 1194 | "id": 34, 1195 | "author_id": "snjax.near", 1196 | "likes": [ 1197 | { 1198 | "author_id": "devgovgigs.near", 1199 | "timestamp": "1671726875741525684" 1200 | } 1201 | ], 1202 | "snapshot": { 1203 | "editor_id": "devgovgigs.near", 1204 | "timestamp": "1672954518780709590", 1205 | "labels": [ 1206 | "kyc", 1207 | "zero-knowledge", 1208 | "zk", 1209 | "proposal" 1210 | ], 1211 | "post_type": "Idea", 1212 | "idea_version": "V1", 1213 | "name": "zkKYC", 1214 | "description": "We propose to build KYC on zkSNARKs. It helps to keep your privacy and interact only with clean assets in decentralized protocols.\n\nFor more details follow the link https://hackmd.io/@zthUvKNmRheIOgHHOGf1fA/rka87lxYi " 1215 | }, 1216 | "snapshot_history": [ 1217 | { 1218 | "editor_id": "snjax.near", 1219 | "timestamp": "1671704405257166950", 1220 | "labels": [], 1221 | "post_type": "Idea", 1222 | "idea_version": "V1", 1223 | "name": "zkKYC", 1224 | "description": "We propose to build KYC on zkSNARKs. It helps to keep your privacy and interact only with clean assets in decentralized protocols.\n\nFor more details follow the link https://hackmd.io/@zthUvKNmRheIOgHHOGf1fA/rka87lxYi " 1225 | } 1226 | ], 1227 | "parent_id": null 1228 | }, 1229 | { 1230 | "post_version": "V0", 1231 | "id": 35, 1232 | "author_id": "hackerhouse.near", 1233 | "likes": [ 1234 | { 1235 | "author_id": "devgovgigs.near", 1236 | "timestamp": "1671726865604854110" 1237 | }, 1238 | { 1239 | "author_id": "root.near", 1240 | "timestamp": "1671728774088924298" 1241 | } 1242 | ], 1243 | "snapshot": { 1244 | "editor_id": "devgovgigs.near", 1245 | "timestamp": "1672954777963359167", 1246 | "labels": [ 1247 | "feature-request", 1248 | "gigs-board", 1249 | "developer-governance" 1250 | ], 1251 | "post_type": "Idea", 1252 | "idea_version": "V1", 1253 | "name": "DevGovGigs Board Improvement", 1254 | "description": "- Sponsor ideas directly (just like past ideas list), also filter for seeing most funded projects\n- Overall feedback board (rather than ideas) for small improvements to improve board (Astro Bounties widget has example)\n- Status (see the status of approval) also information on the approval process\n- Filter (see ideas based on likes) rather than just recent\n- Maybe a matching system, community sponsorship matched with DevDAO amount\n- Context on process for IDEA board with link to neardevgov.org\n- Labels and tags for type of idea (Open Ideas, Grant Proposal, NEP, etc)\n- Group submissions, ability for others to cosign as submitters for largers projects\n- Feed from github regarding updates to https://github.com/near/NEPs/\n" 1255 | }, 1256 | "snapshot_history": [ 1257 | { 1258 | "editor_id": "hackerhouse.near", 1259 | "timestamp": "1671721040252612177", 1260 | "labels": [], 1261 | "post_type": "Idea", 1262 | "idea_version": "V1", 1263 | "name": "DevGovGigs Board Improvement", 1264 | "description": "- Sponsor ideas directly (just like past ideas list), also filter for seeing most funded projects\n- Overall feedback board (rather than ideas) for small improvements to improve board (Astro Bounties widget has example)\n- Status (see the status of approval) also information on the approval process\n- Filter (see ideas based on likes) rather than just recent\n- Maybe a matching system, community sponsorship matched with DevDAO amount\n- Context on process for IDEA board with link to neardevgov.org\n- Labels and tags for type of idea (Open Ideas, Grant Proposal, NEP, etc)\n- Group submissions, ability for others to cosign as submitters for largers projects\n- Feed from github regarding updates to https://github.com/near/NEPs/\n" 1265 | } 1266 | ], 1267 | "parent_id": null 1268 | }, 1269 | { 1270 | "post_version": "V0", 1271 | "id": 36, 1272 | "author_id": "root.near", 1273 | "likes": [ 1274 | { 1275 | "author_id": "devgovgigs.near", 1276 | "timestamp": "1672969119391090963" 1277 | } 1278 | ], 1279 | "snapshot": { 1280 | "editor_id": "root.near", 1281 | "timestamp": "1671731618921207413", 1282 | "labels": [], 1283 | "post_type": "Comment", 1284 | "comment_version": "V2", 1285 | "description": "Questions to the detailed proposal:\n - KYC providers need to bind the persons ID to the on-chain account, otherwise user can attach certificate to whatever account / resell it. That means that \"KYC provider de-anonymization\" is not really solved.\n - Who are KYC providers who you would integrate with?\n - What is user experience of this? As a user, is it expected they would need to go to 3-5-7 KYC providers and upload their documents there?" 1286 | }, 1287 | "snapshot_history": [], 1288 | "parent_id": 34 1289 | }, 1290 | { 1291 | "post_version": "V0", 1292 | "id": 37, 1293 | "author_id": "aliaksandrh.near", 1294 | "likes": [], 1295 | "snapshot": { 1296 | "editor_id": "aliaksandrh.near", 1297 | "timestamp": "1671745721171616759", 1298 | "labels": [], 1299 | "post_type": "Comment", 1300 | "comment_version": "V2", 1301 | "description": "who built it?" 1302 | }, 1303 | "snapshot_history": [], 1304 | "parent_id": 32 1305 | }, 1306 | { 1307 | "post_version": "V0", 1308 | "id": 38, 1309 | "author_id": "snjax.near", 1310 | "likes": [], 1311 | "snapshot": { 1312 | "editor_id": "snjax.near", 1313 | "timestamp": "1671831284723988336", 1314 | "labels": [], 1315 | "post_type": "Comment", 1316 | "comment_version": "V2", 1317 | "description": "* The user could sell his account like in other KYC systems after verification. So, it's a common risk. At the same time, we have a way of deanonymizing bad actors, and as everything is onchain, we have enough opportunities to identify the moment of crime and bad actions.\n* I mean companies that provide KYC as a service ([idnow.io](https://idnow.io/) for example). We have already discussed the potential collaboration with some of them." 1318 | }, 1319 | "snapshot_history": [], 1320 | "parent_id": 36 1321 | }, 1322 | { 1323 | "post_version": "V0", 1324 | "id": 39, 1325 | "author_id": "snjax.near", 1326 | "likes": [], 1327 | "snapshot": { 1328 | "editor_id": "snjax.near", 1329 | "timestamp": "1671831395963285600", 1330 | "labels": [], 1331 | "post_type": "Comment", 1332 | "comment_version": "V2", 1333 | "description": "3. Yes, users should get certificates from different KYC providers, fully passing KYC there. But the certificates are potentially valuable for authorizing accounts on multiple decentralized protocols, so there should not be overhead in UX." 1334 | }, 1335 | "snapshot_history": [], 1336 | "parent_id": 36 1337 | }, 1338 | { 1339 | "post_version": "V0", 1340 | "id": 40, 1341 | "author_id": "aliaksandrh.near", 1342 | "likes": [], 1343 | "snapshot": { 1344 | "editor_id": "devgovgigs.near", 1345 | "timestamp": "1672954205433240722", 1346 | "labels": [ 1347 | "feature-request", 1348 | "gif", 1349 | "near-social", 1350 | "memes" 1351 | ], 1352 | "post_type": "Idea", 1353 | "idea_version": "V1", 1354 | "name": "Supporting simple gif search to be able to have memes like in Telegram to express yourself", 1355 | "description": "Would be great to add ability to search for gifs, given NEAR Social supports all file uploads" 1356 | }, 1357 | "snapshot_history": [ 1358 | { 1359 | "editor_id": "aliaksandrh.near", 1360 | "timestamp": "1671902346710775601", 1361 | "labels": [], 1362 | "post_type": "Idea", 1363 | "idea_version": "V1", 1364 | "name": "Supporting simple gif search to be able to have memes like in Telegram to express yourself", 1365 | "description": "Would be great to add ability to search for gifs, given NEAR Social supports all file uploads" 1366 | } 1367 | ], 1368 | "parent_id": null 1369 | }, 1370 | { 1371 | "post_version": "V0", 1372 | "id": 41, 1373 | "author_id": "hackerhouse.near", 1374 | "likes": [], 1375 | "snapshot": { 1376 | "editor_id": "devgovgigs.near", 1377 | "timestamp": "1672954713088387291", 1378 | "labels": [ 1379 | "app", 1380 | "nft", 1381 | "privacy", 1382 | "zero-knowledge", 1383 | "zk" 1384 | ], 1385 | "post_type": "Idea", 1386 | "idea_version": "V1", 1387 | "name": "Secret Santa NFT Swap", 1388 | "description": "Like tornado cash with NFTs. Put NFT into a pull, receive a SNARK proof to redeem a NFT from the pool." 1389 | }, 1390 | "snapshot_history": [ 1391 | { 1392 | "editor_id": "hackerhouse.near", 1393 | "timestamp": "1671907126847217021", 1394 | "labels": [], 1395 | "post_type": "Idea", 1396 | "idea_version": "V1", 1397 | "name": "Secret Santa NFT Swap", 1398 | "description": "Like tornado cash with NFTs. Put NFT into a pull, receive a SNARK proof to redeem a NFT from the pool." 1399 | } 1400 | ], 1401 | "parent_id": null 1402 | }, 1403 | { 1404 | "post_version": "V0", 1405 | "id": 42, 1406 | "author_id": "hackerhouse.near", 1407 | "likes": [], 1408 | "snapshot": { 1409 | "editor_id": "devgovgigs.near", 1410 | "timestamp": "1672954847101145102", 1411 | "labels": [ 1412 | "wallet", 1413 | "integration" 1414 | ], 1415 | "post_type": "Idea", 1416 | "idea_version": "V1", 1417 | "name": "Add More Wallet Selector Wallets", 1418 | "description": "Currently only, myNEARWallet, NEAR Wallet, Sender, Meteor, and HERE are supported.\n\nLeft out wallets on Wallet Selector.\n- Math Wallet - Injected wallet.\n- Nightly - Injected wallet.\n- Welldone Wallet - Injected wallet.\n- Coin98 Wallet - Injected wallet.\n- Neth - Injected wallet.\n- Ledger - Hardware wallet.\n- WalletConnect - Bridge wallet.\n- Nightly Connect - Bridge wallet.\n- NearFi Wallet - Mobile wallet.\n- Opto Wallet - Mobile wallet & Browser wallet.\n" 1419 | }, 1420 | "snapshot_history": [ 1421 | { 1422 | "editor_id": "hackerhouse.near", 1423 | "timestamp": "1671907386820520472", 1424 | "labels": [], 1425 | "post_type": "Idea", 1426 | "idea_version": "V1", 1427 | "name": "Add More Wallet Selector Wallets", 1428 | "description": "Currently only, myNEARWallet, NEAR Wallet, Sender, Meteor, and HERE are supported.\n\nLeft out wallets on Wallet Selector.\n- Math Wallet - Injected wallet.\n- Nightly - Injected wallet.\n- Welldone Wallet - Injected wallet.\n- Coin98 Wallet - Injected wallet.\n- Neth - Injected wallet.\n- Ledger - Hardware wallet.\n- WalletConnect - Bridge wallet.\n- Nightly Connect - Bridge wallet.\n- NearFi Wallet - Mobile wallet.\n- Opto Wallet - Mobile wallet & Browser wallet.\n" 1429 | } 1430 | ], 1431 | "parent_id": null 1432 | }, 1433 | { 1434 | "post_version": "V0", 1435 | "id": 43, 1436 | "author_id": "hackerhouse.near", 1437 | "likes": [], 1438 | "snapshot": { 1439 | "editor_id": "devgovgigs.near", 1440 | "timestamp": "1672954908581043533", 1441 | "labels": [ 1442 | "feature-request", 1443 | "app", 1444 | "near-social" 1445 | ], 1446 | "post_type": "Idea", 1447 | "idea_version": "V1", 1448 | "name": "SOCIAL MATCH", 1449 | "description": "(Previously on ideas list by \"neardc.near\")\n\nTinder like matching system for near social. ability to swipe on profile cards. Matches based on interests, similar widgets, similar nfts. Ui has card version of profile and similar interests: example you both are in this DAO, hold this nft. Last active _x_ minutes ago. See your matches and add them to friend. Take to chatme.page to continue conversations\n\n" 1450 | }, 1451 | "snapshot_history": [ 1452 | { 1453 | "editor_id": "hackerhouse.near", 1454 | "timestamp": "1671907526301317110", 1455 | "labels": [], 1456 | "post_type": "Idea", 1457 | "idea_version": "V1", 1458 | "name": "SOCIAL MATCH", 1459 | "description": "(Previously on ideas list by \"neardc.near\")\n\nTinder like matching system for near social. ability to swipe on profile cards. Matches based on interests, similar widgets, similar nfts. Ui has card version of profile and similar interests: example you both are in this DAO, hold this nft. Last active _x_ minutes ago. See your matches and add them to friend. Take to chatme.page to continue conversations\n\n" 1460 | } 1461 | ], 1462 | "parent_id": null 1463 | }, 1464 | { 1465 | "post_version": "V0", 1466 | "id": 44, 1467 | "author_id": "hackerhouse.near", 1468 | "likes": [ 1469 | { 1470 | "author_id": "rin.akaia.near", 1471 | "timestamp": "1675654203824222851" 1472 | } 1473 | ], 1474 | "snapshot": { 1475 | "editor_id": "devgovgigs.near", 1476 | "timestamp": "1672954931632834503", 1477 | "labels": [ 1478 | "feature-request", 1479 | "near-social" 1480 | ], 1481 | "post_type": "Idea", 1482 | "idea_version": "V1", 1483 | "name": "Add tip button to profile", 1484 | "description": "(Previously on ideas list by \"neardc.near\")\n\nAdd a tip button to profile and feed for who has been tipped like GitHub sponsor.\n\nAlso would be cool to see roke.to streaming done for creators like a subscription based model" 1485 | }, 1486 | "snapshot_history": [ 1487 | { 1488 | "editor_id": "hackerhouse.near", 1489 | "timestamp": "1671907589216610129", 1490 | "labels": [], 1491 | "post_type": "Idea", 1492 | "idea_version": "V1", 1493 | "name": "Add tip button to profile", 1494 | "description": "(Previously on ideas list by \"neardc.near\")\n\nAdd a tip button to profile and feed for who has been tipped like GitHub sponsor.\n\nAlso would be cool to see roke.to streaming done for creators like a subscription based model" 1495 | } 1496 | ], 1497 | "parent_id": null 1498 | }, 1499 | { 1500 | "post_version": "V0", 1501 | "id": 45, 1502 | "author_id": "hackerhouse.near", 1503 | "likes": [], 1504 | "snapshot": { 1505 | "editor_id": "devgovgigs.near", 1506 | "timestamp": "1672955004789476177", 1507 | "labels": [ 1508 | "feature-request", 1509 | "nft", 1510 | "near-social" 1511 | ], 1512 | "post_type": "Idea", 1513 | "idea_version": "V1", 1514 | "name": "Add NFT DETAILS PAGE ", 1515 | "description": "(Previously on ideas list by \"neardc.near\")\n\nWhen you click on nft on profile it should show a near social page with nft details. NFT details should include name, metadata formatted; transaction history. Could be powered by tradeport. also whether is listed on marketplaces. Additional similar nfts. Show current owner and creator/ minting contract" 1516 | }, 1517 | "snapshot_history": [ 1518 | { 1519 | "editor_id": "hackerhouse.near", 1520 | "timestamp": "1671907726503060779", 1521 | "labels": [], 1522 | "post_type": "Idea", 1523 | "idea_version": "V1", 1524 | "name": "Add NFT DETAILS PAGE ", 1525 | "description": "(Previously on ideas list by \"neardc.near\")\n\nWhen you click on nft on profile it should show a near social page with nft details. NFT details should include name, metadata formatted; transaction history. Could be powered by tradeport. also whether is listed on marketplaces. Additional similar nfts. Show current owner and creator/ minting contract" 1526 | } 1527 | ], 1528 | "parent_id": null 1529 | }, 1530 | { 1531 | "post_version": "V0", 1532 | "id": 46, 1533 | "author_id": "hackerhouse.near", 1534 | "likes": [ 1535 | { 1536 | "author_id": "rin.akaia.near", 1537 | "timestamp": "1675654390594325884" 1538 | } 1539 | ], 1540 | "snapshot": { 1541 | "editor_id": "devgovgigs.near", 1542 | "timestamp": "1672955048289880740", 1543 | "labels": [ 1544 | "feature-request", 1545 | "widget", 1546 | "near-social" 1547 | ], 1548 | "post_type": "Idea", 1549 | "idea_version": "V1", 1550 | "name": "New Profiles Made", 1551 | "description": "A Widget to see the new profiles made everyday on NEAR.social. Like a counter. A graph would be nice. Might also be good to have a new accounts on NEAR counter.\n\nI formerly posted this on ideas list" 1552 | }, 1553 | "snapshot_history": [ 1554 | { 1555 | "editor_id": "hackerhouse.near", 1556 | "timestamp": "1671907767847305984", 1557 | "labels": [], 1558 | "post_type": "Idea", 1559 | "idea_version": "V1", 1560 | "name": "New Profiles Made", 1561 | "description": "A Widget to see the new profiles made everyday on NEAR.social. Like a counter. A graph would be nice. Might also be good to have a new accounts on NEAR counter.\n\nI formerly posted this on ideas list" 1562 | } 1563 | ], 1564 | "parent_id": null 1565 | }, 1566 | { 1567 | "post_version": "V0", 1568 | "id": 47, 1569 | "author_id": "hackerhouse.near", 1570 | "likes": [ 1571 | { 1572 | "author_id": "oztanmain.near", 1573 | "timestamp": "1677684508660385554" 1574 | } 1575 | ], 1576 | "snapshot": { 1577 | "editor_id": "devgovgigs.near", 1578 | "timestamp": "1672955289484567324", 1579 | "labels": [ 1580 | "feature-request", 1581 | "defi", 1582 | "near-social" 1583 | ], 1584 | "post_type": "Idea", 1585 | "idea_version": "V1", 1586 | "name": "Add portfolio tracker to profile page", 1587 | "description": "(Previously idea from neardc.near on ideas list)\n\nPortfolio tab to see token balances, P&L, directly on user profiles. Also open profile in block explorer on the profile banner/header." 1588 | }, 1589 | "snapshot_history": [ 1590 | { 1591 | "editor_id": "hackerhouse.near", 1592 | "timestamp": "1671907883606067541", 1593 | "labels": [], 1594 | "post_type": "Idea", 1595 | "idea_version": "V1", 1596 | "name": "Add portfolio tracker to profile page", 1597 | "description": "(Previously idea from neardc.near on ideas list)\n\nPortfolio tab to see token balances, P&L, directly on user profiles. Also open profile in block explorer on the profile banner/header." 1598 | } 1599 | ], 1600 | "parent_id": null 1601 | }, 1602 | { 1603 | "post_version": "V0", 1604 | "id": 48, 1605 | "author_id": "hackerhouse.near", 1606 | "likes": [], 1607 | "snapshot": { 1608 | "editor_id": "devgovgigs.near", 1609 | "timestamp": "1672955445418083849", 1610 | "labels": [ 1611 | "feature-request", 1612 | "near-social" 1613 | ], 1614 | "post_type": "Idea", 1615 | "idea_version": "V1", 1616 | "name": "Add Connections (1st,2nd,3rd)", 1617 | "description": "Based on people who are friends (both follow each other). Like LinkedIN. You have 3 mutual connections. This is a 1st connection, a 2nd connection, etc. \n\nMaybe Momo from Satori can do this as he built a D3 visualizer for Desocial leveraging social DB. " 1618 | }, 1619 | "snapshot_history": [ 1620 | { 1621 | "editor_id": "hackerhouse.near", 1622 | "timestamp": "1671932882047940379", 1623 | "labels": [], 1624 | "post_type": "Idea", 1625 | "idea_version": "V1", 1626 | "name": "Add Connections (1st,2nd,3rd)", 1627 | "description": "Based on people who are friends (both follow each other). Like LinkedIN. You have 3 mutual connections. This is a 1st connection, a 2nd connection, etc. \n\nMaybe Momo from Satori can do this as he built a D3 visualizer for Desocial leveraging social DB. " 1628 | } 1629 | ], 1630 | "parent_id": null 1631 | }, 1632 | { 1633 | "post_version": "V0", 1634 | "id": 49, 1635 | "author_id": "hackerhouse.near", 1636 | "likes": [ 1637 | { 1638 | "author_id": "calcamonia.near", 1639 | "timestamp": "1672235009378222558" 1640 | } 1641 | ], 1642 | "snapshot": { 1643 | "editor_id": "devgovgigs.near", 1644 | "timestamp": "1672955327520712201", 1645 | "labels": [ 1646 | "feature-request", 1647 | "near-social" 1648 | ], 1649 | "post_type": "Idea", 1650 | "idea_version": "V1", 1651 | "name": "Trending Hashtags", 1652 | "description": "Since there are posts, we should have trending hashtags with a multiplier based on engagement for posts and number of posts using hashtag and then search queries based on that hash tag for posts. \n\nThis should show up on the homepage, maybe be better than the poke area. " 1653 | }, 1654 | "snapshot_history": [ 1655 | { 1656 | "editor_id": "hackerhouse.near", 1657 | "timestamp": "1671933540356069493", 1658 | "labels": [], 1659 | "post_type": "Idea", 1660 | "idea_version": "V1", 1661 | "name": "Trending Hashtags", 1662 | "description": "Since there are posts, we should have trending hashtags with a multiplier based on engagement for posts and number of posts using hashtag and then search queries based on that hash tag for posts. \n\nThis should show up on the homepage, maybe be better than the poke area. " 1663 | } 1664 | ], 1665 | "parent_id": null 1666 | }, 1667 | { 1668 | "post_version": "V0", 1669 | "id": 50, 1670 | "author_id": "blaze.near", 1671 | "likes": [ 1672 | { 1673 | "author_id": "calcamonia.near", 1674 | "timestamp": "1672234969500624885" 1675 | } 1676 | ], 1677 | "snapshot": { 1678 | "editor_id": "devgovgigs.near", 1679 | "timestamp": "1672954148079179705", 1680 | "labels": [ 1681 | "feature-request", 1682 | "near-social" 1683 | ], 1684 | "post_type": "Idea", 1685 | "idea_version": "V1", 1686 | "name": "NearSocial MarkDown Editor with Emoji support", 1687 | "description": "There is a need for formatting/styling on posts with emojis." 1688 | }, 1689 | "snapshot_history": [ 1690 | { 1691 | "editor_id": "blaze.near", 1692 | "timestamp": "1671979352720137496", 1693 | "labels": [], 1694 | "post_type": "Idea", 1695 | "idea_version": "V1", 1696 | "name": "NearSocial MarkDown Editor with Emoji support", 1697 | "description": "There is a need for formatting/styling on posts with emojis." 1698 | } 1699 | ], 1700 | "parent_id": null 1701 | }, 1702 | { 1703 | "post_version": "V0", 1704 | "id": 51, 1705 | "author_id": "michaelpeter.near", 1706 | "likes": [ 1707 | { 1708 | "author_id": "root.near", 1709 | "timestamp": "1672848855221820145" 1710 | } 1711 | ], 1712 | "snapshot": { 1713 | "editor_id": "devgovgigs.near", 1714 | "timestamp": "1672954625114302433", 1715 | "labels": [ 1716 | "security", 1717 | "widget", 1718 | "near-social" 1719 | ], 1720 | "post_type": "Idea", 1721 | "idea_version": "V1", 1722 | "name": "Convenient verification of user content", 1723 | "description": "Early widgets which display user-generated content can set a good example by updating to include quick access to some method of verifying the content was truly generated by the user in question.\n\nExample Scenario: A malicious user creates a fork of a widget which is responsible for displaying user-generated content like `MainPage.Feed` and gains views either by offering legitimate improvements or by misleading users as to the widget they are viewing. The malicious widget then inserts fraudulent user content such as a noteable figure urging their followers to donate to a specific address.\n\nMinimal Suggested Solution: Widgets which display a given piece of user-generated data provide a link to NEAR Explorer for quick verification that it was generated by the account in question.\n\ne.g. https://explorer.near.org/transactions/EBCA2GjZrdTbxEcpCqPv76YjKVR3gubjSveBHmEi9xen#DZZ7U2Bg2D8Mvqw577wzQ1Kp2XLukYESBCviY2qHngQt" 1724 | }, 1725 | "snapshot_history": [ 1726 | { 1727 | "editor_id": "michaelpeter.near", 1728 | "timestamp": "1672029196164717151", 1729 | "labels": [], 1730 | "post_type": "Idea", 1731 | "idea_version": "V1", 1732 | "name": "Convenient verification of user content", 1733 | "description": "Early widgets which display user-generated content can set a good example by updating to include quick access to some method of verifying the content was truly generated by the user in question.\n\nExample Scenario: A malicious user creates a fork of a widget which is responsible for displaying user-generated content like `MainPage.Feed` and gains views either by offering legitimate improvements or by misleading users as to the widget they are viewing. The malicious widget then inserts fraudulent user content such as a noteable figure urging their followers to donate to a specific address.\n\nMinimal Suggested Solution: Widgets which display a given piece of user-generated data provide a link to NEAR Explorer for quick verification that it was generated by the account in question.\n\ne.g. https://explorer.near.org/transactions/EBCA2GjZrdTbxEcpCqPv76YjKVR3gubjSveBHmEi9xen#DZZ7U2Bg2D8Mvqw577wzQ1Kp2XLukYESBCviY2qHngQt" 1734 | } 1735 | ], 1736 | "parent_id": null 1737 | }, 1738 | { 1739 | "post_version": "V0", 1740 | "id": 52, 1741 | "author_id": "hackerhouse.near", 1742 | "likes": [ 1743 | { 1744 | "author_id": "toolipse.near", 1745 | "timestamp": "1673531160918552299" 1746 | }, 1747 | { 1748 | "author_id": "rin.akaia.near", 1749 | "timestamp": "1675654226295848998" 1750 | } 1751 | ], 1752 | "snapshot": { 1753 | "editor_id": "devgovgigs.near", 1754 | "timestamp": "1672955376049664178", 1755 | "labels": [ 1756 | "feature-request", 1757 | "marketplace", 1758 | "near-social", 1759 | "nft", 1760 | "swaps" 1761 | ], 1762 | "post_type": "Idea", 1763 | "idea_version": "V1", 1764 | "name": "NFT Swap (\"Barter\") on NEAR Social", 1765 | "description": "Requirements \n- Ability to offer NFTs you own for NFTs in someone else's wallet.\n- Ability to decline offers\n- Need UI + Swap contract.\n- UI includes entering address and selecting NFTs you want and see NFTs in your wallet to offer\n- NEAR.social UI integration would be dropping down addresses to trade with that you follow\n- Standardize this as NEP so NFT marketplaces can display offers as well as wallets.\n- UI on marketplace next to Buy could have Barter (and popup to show other NFTs) and then popup for your wallet\n\nPast implementations on NEAR (but not open source or teams are inactive)\n- HavenSwap https://swap.havendao.antisociallabs.io/ (by AntiSocial Labs)\n- SwapLand https://swapp.land/\n" 1766 | }, 1767 | "snapshot_history": [ 1768 | { 1769 | "editor_id": "hackerhouse.near", 1770 | "timestamp": "1672101641733953443", 1771 | "labels": [], 1772 | "post_type": "Idea", 1773 | "idea_version": "V1", 1774 | "name": "NFT Swap (\"Barter\") on NEAR Social", 1775 | "description": "Requirements \n- Ability to offer NFTs you own for NFTs in someone else's wallet.\n- Ability to decline offers\n- Need UI + Swap contract.\n- UI includes entering address and selecting NFTs you want and see NFTs in your wallet to offer\n- NEAR.social UI integration would be dropping down addresses to trade with that you follow\n- Standardize this as NEP so NFT marketplaces can display offers as well as wallets.\n- UI on marketplace next to Buy could have Barter (and popup to show other NFTs) and then popup for your wallet\n\nPast implementations on NEAR (but not open source or teams are inactive)\n- HavenSwap https://swap.havendao.antisociallabs.io/ (by AntiSocial Labs)\n- SwapLand https://swapp.land/\n" 1776 | } 1777 | ], 1778 | "parent_id": null 1779 | }, 1780 | { 1781 | "post_version": "V0", 1782 | "id": 53, 1783 | "author_id": "hackerhouse.near", 1784 | "likes": [ 1785 | { 1786 | "author_id": "rin.akaia.near", 1787 | "timestamp": "1675654321992555803" 1788 | } 1789 | ], 1790 | "snapshot": { 1791 | "editor_id": "devgovgigs.near", 1792 | "timestamp": "1672955478732603194", 1793 | "labels": [ 1794 | "feature-request", 1795 | "near-social" 1796 | ], 1797 | "post_type": "Idea", 1798 | "idea_version": "V1", 1799 | "name": "Add Repost to Feed", 1800 | "description": "Add Repost to a Post on Feed so it shows on other people's feed that follows you. Can show like retweet UI. \n\nWould be cool to see audit trail of Reposts unlike traditional retweet.\n\nThis could also be quote tweet style of posts with a comment and tweet embed. But if RTs were more like a blockchain where you can trace who RT'd who'se RT instead of just a total count, you can see the path of influence." 1801 | }, 1802 | "snapshot_history": [ 1803 | { 1804 | "editor_id": "hackerhouse.near", 1805 | "timestamp": "1672101880955498899", 1806 | "labels": [], 1807 | "post_type": "Idea", 1808 | "idea_version": "V1", 1809 | "name": "Add Repost to Feed", 1810 | "description": "Add Repost to a Post on Feed so it shows on other people's feed that follows you. Can show like retweet UI. \n\nWould be cool to see audit trail of Reposts unlike traditional retweet.\n\nThis could also be quote tweet style of posts with a comment and tweet embed. But if RTs were more like a blockchain where you can trace who RT'd who'se RT instead of just a total count, you can see the path of influence." 1811 | } 1812 | ], 1813 | "parent_id": null 1814 | }, 1815 | { 1816 | "post_version": "V0", 1817 | "id": 54, 1818 | "author_id": "magamedrasul.near", 1819 | "likes": [ 1820 | { 1821 | "author_id": "mastrophot.near", 1822 | "timestamp": "1672561605277364992" 1823 | }, 1824 | { 1825 | "author_id": "vself.near", 1826 | "timestamp": "1673974798812217521" 1827 | }, 1828 | { 1829 | "author_id": "cuongdcdev.near", 1830 | "timestamp": "1673170855727092879" 1831 | }, 1832 | { 1833 | "author_id": "magamedrasul.near", 1834 | "timestamp": "1672169380345664320" 1835 | }, 1836 | { 1837 | "author_id": "gafram.near", 1838 | "timestamp": "1672409201528582494" 1839 | } 1840 | ], 1841 | "snapshot": { 1842 | "editor_id": "devgovgigs.near", 1843 | "timestamp": "1672954046376959408", 1844 | "labels": [ 1845 | "metabuild", 1846 | "hackathon", 1847 | "voting", 1848 | "dao" 1849 | ], 1850 | "post_type": "Idea", 1851 | "idea_version": "V1", 1852 | "name": "VoAn - Anonymous voting/DAO platform", 1853 | "description": "Anonymous voting platform | DAO platform with anonymous voting feature.\n\nThe project (mvp version) was built for the Metabuild III Hackathon:\n* [VoAn](http://voan.site) - try the app\n* [Full description](https://curryrasul.github.io/voan) - explanation/related\n* [Github repo](https://github.com/curryrasul/voan)\n* [Metabuild submission](https://devpost.com/software/voan)\n\nFurther work (by prod/management side):\nAt the moment we are thinking whether to launch our platform from scratch, make fork of sputnik-dao contracts and launch our own platform OR develop a partnership with AstroDAO team and add anonymous voting feature there.\n\nGeneral roadmap is available at the [website](https://curryrasul.github.io/voan/roadmap.html).\n\nThanks for attention!" 1854 | }, 1855 | "snapshot_history": [ 1856 | { 1857 | "editor_id": "magamedrasul.near", 1858 | "timestamp": "1672169220071164917", 1859 | "labels": [], 1860 | "post_type": "Idea", 1861 | "idea_version": "V1", 1862 | "name": "VoAn - Anonymous voting/DAO platform", 1863 | "description": "Anonymous voting platform | DAO platform with anonymous voting feature.\n\nThe project (mvp version) was built for the Metabuild III Hackathon:\n* [VoAn](http://voan.site) - try the app\n* [Full description](https://curryrasul.github.io/voan) - explanation/related\n* [Github repo](https://github.com/curryrasul/voan)\n* [Metabuild submission](https://devpost.com/software/voan)\n\nFurther work (by prod/management side):\nAt the moment we are thinking whether to launch our platform from scratch, make fork of sputnik-dao contracts and launch our own platform OR develop a partnership with AstroDAO team and add anonymous voting feature there.\n\nGeneral roadmap is available at the [website](https://curryrasul.github.io/voan/roadmap.html).\n\nThanks for attention!" 1864 | } 1865 | ], 1866 | "parent_id": null 1867 | }, 1868 | { 1869 | "post_version": "V0", 1870 | "id": 60, 1871 | "author_id": "djwine_official.near", 1872 | "likes": [ 1873 | { 1874 | "author_id": "bo.near", 1875 | "timestamp": "1699934724886973343" 1876 | } 1877 | ], 1878 | "snapshot": { 1879 | "editor_id": "djwine_official.near", 1880 | "timestamp": "1672781825017942757", 1881 | "labels": [], 1882 | "post_type": "Comment", 1883 | "comment_version": "V2", 1884 | "description": "i did. making improvements atm." 1885 | }, 1886 | "snapshot_history": [], 1887 | "parent_id": 37 1888 | } 1889 | ] --------------------------------------------------------------------------------