Skip to content

Commit

Permalink
Merge pull request #339 from 0xsend/deploy-main
Browse files Browse the repository at this point in the history
Deploy main
  • Loading branch information
0xBigBoss authored Apr 22, 2024
2 parents 3b0e875 + 3c98c6e commit 8e17324
Show file tree
Hide file tree
Showing 29 changed files with 3,788 additions and 2,253 deletions.
51 changes: 49 additions & 2 deletions .snaplet/snaplet-client.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ type Override = {
allowed_mime_types?: string;
owner_id?: string;
objects?: string;
s3_multipart_uploads?: string;
s3_multipart_uploads_parts?: string;
};
}
chain_addresses?: {
Expand Down Expand Up @@ -96,7 +98,6 @@ type Override = {
qualification_start?: string;
qualification_end?: string;
claim_end?: string;
snapshot_id?: string;
hodler_min_balance?: string;
created_at?: string;
updated_at?: string;
Expand Down Expand Up @@ -187,6 +188,38 @@ type Override = {
tags?: string;
};
}
s3_multipart_uploads?: {
name?: string;
fields?: {
id?: string;
in_progress_size?: string;
upload_signature?: string;
bucket_id?: string;
key?: string;
version?: string;
owner_id?: string;
created_at?: string;
buckets?: string;
s3_multipart_uploads_parts?: string;
};
}
s3_multipart_uploads_parts?: {
name?: string;
fields?: {
id?: string;
upload_id?: string;
size?: string;
part_number?: string;
bucket_id?: string;
key?: string;
etag?: string;
owner_id?: string;
version?: string;
created_at?: string;
buckets?: string;
s3_multipart_uploads?: string;
};
}
auth_schema_migrations?: {
name?: string;
fields?: {
Expand Down Expand Up @@ -443,6 +476,8 @@ export interface Fingerprint {
updatedAt?: FingerprintDateField;
fileSizeLimit?: FingerprintNumberField;
objects?: FingerprintRelationField;
s3MultipartUploads?: FingerprintRelationField;
s3MultipartUploadsParts?: FingerprintRelationField;
}
chainAddresses?: {
createdAt?: FingerprintDateField;
Expand Down Expand Up @@ -487,7 +522,6 @@ export interface Fingerprint {
qualificationStart?: FingerprintDateField;
qualificationEnd?: FingerprintDateField;
claimEnd?: FingerprintDateField;
snapshotId?: FingerprintNumberField;
hodlerMinBalance?: FingerprintNumberField;
createdAt?: FingerprintDateField;
updatedAt?: FingerprintDateField;
Expand Down Expand Up @@ -534,6 +568,19 @@ export interface Fingerprint {
referrer?: FingerprintRelationField;
tagByTag?: FingerprintRelationField;
}
s3MultipartUploads?: {
inProgressSize?: FingerprintNumberField;
createdAt?: FingerprintDateField;
bucket?: FingerprintRelationField;
s3MultipartUploadsPartsByUploadId?: FingerprintRelationField;
}
s3MultipartUploadsParts?: {
size?: FingerprintNumberField;
partNumber?: FingerprintNumberField;
createdAt?: FingerprintDateField;
bucket?: FingerprintRelationField;
upload?: FingerprintRelationField;
}
authSchemaMigrations?: {

}
Expand Down
44 changes: 43 additions & 1 deletion .snaplet/snaplet.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ interface Table_public_distributions {
qualification_start: string;
qualification_end: string;
claim_end: string;
snapshot_id: number | null;
hodler_min_balance: number;
created_at: string;
updated_at: string;
Expand Down Expand Up @@ -253,6 +252,28 @@ interface Table_auth_refresh_tokens {
parent: string | null;
session_id: string | null;
}
interface Table_storage_s_3_multipart_uploads {
id: string;
in_progress_size: number;
upload_signature: string;
bucket_id: string;
key: string;
version: string;
owner_id: string | null;
created_at: string;
}
interface Table_storage_s_3_multipart_uploads_parts {
id: string;
upload_id: string;
size: number;
part_number: number;
bucket_id: string;
key: string;
etag: string;
owner_id: string | null;
version: string;
created_at: string;
}
interface Table_auth_saml_providers {
id: string;
sso_provider_id: string;
Expand Down Expand Up @@ -575,6 +596,8 @@ interface Schema_storage {
buckets: Table_storage_buckets;
migrations: Table_storage_migrations;
objects: Table_storage_objects;
s3_multipart_uploads: Table_storage_s_3_multipart_uploads;
s3_multipart_uploads_parts: Table_storage_s_3_multipart_uploads_parts;
}
interface Schema_supabase_functions {
hooks: Table_supabase_functions_hooks;
Expand Down Expand Up @@ -621,6 +644,8 @@ interface Tables_relationships {
};
children: {
objects_bucketId_fkey: "storage.objects";
s3_multipart_uploads_bucket_id_fkey: "storage.s3_multipart_uploads";
s3_multipart_uploads_parts_bucket_id_fkey: "storage.s3_multipart_uploads_parts";
};
};
"public.chain_addresses": {
Expand Down Expand Up @@ -759,6 +784,23 @@ interface Tables_relationships {

};
};
"storage.s3_multipart_uploads": {
parent: {
s3_multipart_uploads_bucket_id_fkey: "storage.buckets";
};
children: {
s3_multipart_uploads_parts_upload_id_fkey: "storage.s3_multipart_uploads_parts";
};
};
"storage.s3_multipart_uploads_parts": {
parent: {
s3_multipart_uploads_parts_bucket_id_fkey: "storage.buckets";
s3_multipart_uploads_parts_upload_id_fkey: "storage.s3_multipart_uploads";
};
children: {

};
};
"auth.saml_providers": {
parent: {
saml_providers_sso_provider_id_fkey: "auth.sso_providers";
Expand Down
3 changes: 3 additions & 0 deletions apps/distributor/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,6 @@ dist

# version base .env
!.env

# ignore calculated data files
balances.json
62 changes: 62 additions & 0 deletions apps/distributor/bin/calc-example.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { Mode, calculatePercentageWithBips, calculateWeights } from '../src/weights'
import { parseArgs } from 'node:util'
import 'zx/globals'

const distAmt = 900000000n // 900,000,000 SEND
const holderPoolBips = 6500n // 65%

const holderPoolAmount = calculatePercentageWithBips(distAmt, holderPoolBips)

const path = `${import.meta.dir}/../balances.json`
console.log('Reading balances from', path)

if (!(await Bun.file(path).exists())) {
throw new Error(
`File ${path} does not exist. You can generate one by running distributor with debug logs and re-calculating the shares.`
)
}

const balances = (await Bun.file(`${import.meta.dir}/../balances.json`).json()) as readonly {
address: `0x${string}`
balance: string
}[]

const totalBalance = balances.reduce((acc, balance) => acc + BigInt(balance.balance), 0n)
const numBalances = balances.length

console.log('totalBalance', totalBalance)
console.log('numBalances', numBalances)

const balByAddr = balances.reduce(
(acc, balance) => {
acc[balance.address] = balance.balance
return acc
},
{} as Record<string, string>
)

console.log('Calculating weights...', balances.length)

const { totalWeight, weightPerSend, poolWeights, weightedShares } = calculateWeights(
balances,
holderPoolAmount,
Mode.Linear
)

// console.log('totalWeight', totalWeight)
// console.log('weightPerSend', weightPerSend)
// console.log('poolWeights', poolWeights)
// console.log('weightedShares', weightedShares)

const shares = Object.values(weightedShares).sort(
(a, b) => Number(balByAddr[b.address]) - Number(balByAddr[a.address])
)

console.log('row\taddress\tbalance\tamount\tperc_of_balance\tposition')
shares.map((share, idx) => {
const addr = share.address
const bal = Number(balByAddr[addr])
const perc = ((Number(share.amount) / bal) * 100).toFixed(2)
const position = Math.floor((Number(bal) / Number(totalBalance)) * numBalances)
console.log(`${idx + 1}\t${addr}\t${bal}\t${share.amount}\t${perc}%\t${position}`)
})
65 changes: 65 additions & 0 deletions apps/distributor/bin/calc-shares.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import { parseArgs } from 'node:util'
import { supabaseAdmin } from '../src/supabase'
import 'zx/globals'

if (!$.env.SUPABASE_SERVICE_ROLE) {
throw new Error('SUPABASE_SERVICE_ROLE is required')
}

const { values } = parseArgs({
args: Bun.argv,
options: {
distributor: {
type: 'string',
default: 'http://localhost:3050/distributor',
},
distribution: {
type: 'string',
default: undefined,
},
},
strict: true,
allowPositionals: true,
})

if (values.distribution === undefined) {
const { data, error } = await supabaseAdmin
.from('distributions')
.select('*')
.order('number', { ascending: false })
.limit(1)
.single()
if (error) {
throw error
}
if (!data) {
throw new Error('No distribution found')
}
values.distribution = data.id.toString()
}

const { distributor, distribution } = values

if (distribution === undefined) {
throw new Error('Distribution not found')
}

if (distributor === undefined) {
throw new Error('Distributor not found')
}

console.log(chalk.blue('Calculating distribution shares...'), { distributor, distribution })

// send post request to distributor running at localhost:3050
const response = await fetch(distributor, {
method: 'POST',
body: JSON.stringify({ id: distribution }),
headers: {
'Content-Type': 'application/json',
Authorization: $.env.SUPABASE_SERVICE_ROLE,
},
})

// // get the response body
const body = await response.json()
console.log('Done', body)
8 changes: 8 additions & 0 deletions apps/distributor/src/__snapshots__/distributor.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Bun Snapshot v1, https://goo.gl/fbAQLP

exports[`Distributor Route should return a merkle root: distribution 4 merkle root 1`] = `
{
"root": "0x0323baed48d30414af5f66d611d02e0c905bf97ca10b60942104a85b86cab876",
"total": 627736455,
}
`;
Loading

0 comments on commit 8e17324

Please sign in to comment.