►
From YouTube: PSF TSC Meeting - 3/17/21
Description
Agenda for this meeting:
https://github.com/Permissionless-Software-Foundation/TSC/issues/6
Main topics discussed:
- bch-api rate limits were recently refactored. We go into the 'what' and 'why'.
- bcp-js from Stoyan formats OP_RETURN data for better NFT handling
A
B
A
Okay.
Well
thanks
for
attending
the
technical
steering
committee
guys,
it
looks
like
it's
just
the
three
of
us:
let's
just
quickly
go
around
and
introduce
ourselves
before
we
get
started,
I'm
chris
trotner.
I
founded
the
permissionless
software
foundation
and
fullstack.cache,
which
is
a
blockchain
as
a
service
for
both
the
bitcoin
cash
and
ecash
blockchains
and
yeah.
We're
going
to
talk
about
some
of
the
software
updates
today
that
has
been
going
on
around
fullstack.cache
stoian.
Once
you
introduce
yourself.
D
Yes,
hey
I'm
joey
king,
I'm
a
javascript
developer,
currently
working
for
bitcoin
abc
I'm
working
on
the
cash
tab,
family
of
web
apps.
A
Nice
and
encourage
everybody
to
check
out
cash
tab
as
it's
pretty
cool
app
and
browser
extension.
A
Pretty
short
one
today,
the
main
thing
I
wanted
to
cover
was
some
major
refactors
that
landed
on
bch
api
with
regard
to
the
rate
limiting,
and
this
is
going
to
affect
users
of
full
stack,
dot,
cash
and,
and
it
added
some
features
that
users
requested
for
bch
api.
A
I'm
going
to
also
introduce
some
changes
that
have
not
been
made
yet,
but
will
be
made
soon
and
could
potentially
be
disruptive
to
a
minimal
slp
wallet,
which
is
the
wallet
engine
behind
wallet.fullstack.cache
and
some
of
the
other
wallet
apps
under
the
fullstack.cache
umbrella,
and
then
I
named
this
incorrectly
stoian
but
stoian's
going
to
introduce
us
to
bcp.js
after
that.
A
So
let
me
just
dive
in
here.
This
is
the
repository
for
bch
api,
and
this
is
a
fundamental
part
of
what
has
been
we've
been
calling
the
cash
stack.
So
it's
the
rest,
api
component
that
talks
to
all
the
lower
level
infrastructure
like
the
full
node,
the
slp
db
indexer
and
the
fulcrum
indexer.
A
So
this
is
sort
of
a
rough
diagram
here
and
the
way
full
stack
dot
cash
works
is
there's
these
rate
limits
and
there's
actually
in
in
in
talking
with
users
and
looking
at
the
business
of
full
stack,
dot,
cash
and
and
and
talking
to
some
of
the
companies
that
also
use
the
full
stack
dot
cash
infrastructure
that
run
their
own
isolated
infrastructure,
separate
from
the
tiered
services.
There's
really
four
use
cases
that
that
we
needed
to
target
the
first
is
users
who
who
well.
A
This
is
actually
a
corner
case.
One
I'm
building
up
to
is
users
who
want
to
build,
buy
a
job
token
for
access
for
a
short
period
of
time
like
24
hours.
This
is
not
a
use
case,
it's
really
being
used
right
now,
but
it's
something
that
I
want
to
target
going
forward.
A
Also,
the
I've
gotten
requests
from
users.
Previously,
I
only
had
the
100
rate
per
minute
or
request
per
minute
tier
and
they
requested
higher
rpm
tiers.
So
now
we
have
a
100,
a
250
and
a
600
rpm
tier
for
people
who
need
higher
rate
limits
and
the
main
reason
well
I'll,
go
and
I'll
go
into
the
reason
why
we
need
more.
The
third
major
use
case,
we're
targeting
is
basic
authentication
which
should
not
have
any
rate
limits
applied.
A
This
is
this
is
for
this
is
actually
probably
the
major
use
case
for
for
clients
of
fullstack.cash
who
want
to
run
isolated
infrastructure
for
their
company.
They
want
the
system
to
run
as
fast
as
possible.
They
don't
want
to
be
exposed
to
rate
limits,
but
they
still
need
some
sort
of
authentication
so
that
their
servers
are
not
publicly
available,
so
that
they're,
the
only
ones
using
their
servers.
So
that's
basic
authentication.
A
The
fourth
use
case
is
local
installations
that
do
not
use
either
any
sort
of
basic
authentication
or
any
sort
of
rate
limits.
So
for
those
for
that
kit
use
case
for,
like
the
hobbyists
and
developers
working
locally
bch
api
now
has
this
do
not
use
rate
limit
flag.
It's
an
environment
variable.
So
if
you
set
that
to
you
know
to
anything
other
like
to
anything
really.
A
If
it's
just
exists,
then
it
will
skip
this
block
and
it
will
not
implement
either
rate
limits
or
basic
authentication
and
then
for
the
the
basic
off
that
hasn't
really
changed
for
those
for
those,
we
did
more
thorough
testing
so
that
the
rate
limits
are
truly
not
being
applied,
and
we
added
unit
tests
to
make
sure
that
the
system's
actually
working
the
way
we
expect
it
to.
A
Let
me
talk
for
a
minute
about
these
higher
rate
limits,
so
one
of
the
one
of
the
trade-offs
I've
been
bumping
up
against
and
joey
you-
and
I
talked
about
this
a
while
ago-
is
this
sort
of
these?
This
concept
of
heavy
api
calls
there's
there's
very
simple.
Api
calls
like
get
transaction
information,
which
is
just
one
call
to
a
full
node
and
then
there's
these
heavy
calls
like
hydrate
utxos
or
get
public
key
or
utxo.get.
These
are
some
of
these
newer,
higher
level.
A
Abstraction
calls
that
actually
set
off
they're
one
api
call,
but
they
set
off
a
chain
reaction
of
apis
and
so
they're
heavy
in
that
they
they
are
much
more
cpu
intensive
to
the
server
and
so
the
the
trade-off.
I've
been
wrestling
with
is
how
do
we
make
it
fair?
How
do
we
make
you
know
the
people
who
are
using
the
heavy
apis?
How
do
we
charge
them
fairly
for
the
people
who
are
using
the
lower
level
apis,
and
so
the
this
is
the
big
change
that
happened
with
this
rate
limit
refactor?
A
Is
that
heavy
like,
if
you
call
hydrate
utxos,
which
is
just
one
api,
call
it's
going
to
all
the
other
api
calls
that
it
that
sets
off
that
chain
reaction,
that's
going
to
count
against
the
user's
rate
limits,
and
so
it
makes
it
makes
the
heavy
api
calls.
You
know
it's
fair
like
and
it
lets
us
add,
let's
fullstack.cash,
add
more
and
more
higher
level.
A
Abstraction
calls
we've
got
like
one
call
we
want
to
add
is
a
transaction
call
where
you
get
the
addresses
of
both
the
inputs
and
the
outputs,
as
well
as
any
slp
token
amounts
for
inputs
and
outputs.
That's
that
it
requires
quite
a
bit
of
computation
to
get
all
that
information
together,
and
so
that's
going
to
that's
going
to
be
another
high
or
heavy
api
type
call
call.
We
want
to
add
another:
one
is
the
the
balance
of
an
address
over
time
so
that
you?
A
Basically
it's
a
transaction
history,
but
every
every
entry
in
that
transaction
history
like
has
a
an
accumulated
balance,
so
you
can
see
the
balance
of
an
address
over
time.
So
these
are.
These
are
like
feature
requests
that
people
have
been
have
been
submitting
and
we
want
to
provide
them,
but
they're
they're,
very
heavy
api
api,
heavy
calls-
and
so
this
refactors
going
to.
A
Let
us
push
forward
by
adding
these
these
new
desired
features,
but
keep
everything
fair,
but
that's
also
why
we
needed
a
higher
rpm
tiers,
because
the
100
rpm
tier
is
not
going
to
go
as
far
as
it
did
in
the
past
and
and
as
a
result,
we
lowered
the
price.
So
I
full
stack
that
cash,
the
100
rpm
tiers
10
a
month,
the
250
rpm
tiers
20
a
month
in
the
600
rpm
tier
is
30
a
month
and
then
from
there
you
can
start
to
jump
into
isolated
infrastructure.
A
So
just
trying
to
to
offer
more
options
to
our
users
is
was
the
main
motivation.
So
that's
the
main
change
has
happened
to
bch
api
and
now
that
that's
been
done,
there's
this
this
utxos
get
call
api
call,
which
is
a
very
handy
api
call
and
you
give
it
an
address
and
it
retrieves
all
the
utxos
and
then
this
new
little
bit
that
I've
never
seen
anybody
do
as
far
as
I'm
aware
we're
the
only
ones
who
do
this.
It
does
this
very
nice
sorting
of
the
utxos
so
that
anything.
A
There's
all
the
if
it's
an
slp
utxo
it'll
get
categorized,
whether
it's
token
type
one
or
an
nft
minting
baton
or
or
other
things
like
that,
each
utxo
will
get
categorized
and
dropped
into
an
array
for
its
category
and
then
anything
because
we
live
in
a
messy
world
and
and
things
get
messy
and
we
hit
rate
limits,
anything
that
can't
be
verified
and
that
one
call
will
get
thrown
into
this
null
utxo
sort
of
bucket
array,
and
that
way
a
wallet
app
can
safely
just
ignore
those
utxos
or
or
try
to
hydrate
them
on
a
second
call,
but
basically
its
exception
handling
is,
and
so
this
this
function's
been
around
for
a
little
bit,
but
it's
very
different
from
the
way
that
minimal
slp
wallet
works
now,
which
again,
is
the
the
sort
of
core
wallet
engine
that
the
the
web
wallet
uses
and
so
we're
gonna
the
next
over
the
next
week
or
two.
A
C
A
Yeah
yeah
yeah
no
surprises
for
those
who've
been
paying
attention.
Well,
that's
all
that
was
on
the
agenda
and
stoian.
I'm
really
keen
to
hear
about
this
bcpjs.
Why
don't
you
tell
us
about
it.
C
C
Okay,
so
I
have
a
little
proposal
for
the
protocol:
name,
blockchain,
payloads
or
blockchain
pointers,
whatever
will
be
so
like
vcp,
and
what
is
all
this
about
in
the
moment?
There's
already
a
lot
of
different
like
type
of
nft
tokens.
C
All
of
them
are
doing
this
differently,
so
for
the
wallet
developers
and
for
exchange
developers,
it's
pretty
difficult.
They
need
to
implement
all
of
these
tokens
differently
to
show,
for
example,
the
images.
C
So
this
proposal
is
mostly
for
the
way
how
to
describe
how
to
create
a
little
pointer
to
different
resources
like,
for
example,
ipfs,
hashes
or
or
usually
other
transactions
on
the
blockchain.
C
C
So
physically,
this
protocol
is
is
in
fact
just
a
simple
op
return
transaction.
Yes,
op
return
transaction.
It
have
its
own
low
cut
in
only
three
parts
which
the
first
one
is
the
message
type
of
this
data.
It's
very
convenient
because
you
can
from
here
get
only
for
audio
files,
for
example,
if
you
want
to
do
the
only
audio
like
stuff
or
only
video
files,
or
in
the
moment
this,
this
wi-fi
type,
you
can
just
get
this
one
cool
and
yeah.
C
The
second
part
is
so:
where
is
this
data
like
located
and
it
can
be
inside
the
transaction
itself
like
it
can
be
a
simple
text
encoded
in
this
op
return,
so
it
will
become
like
same
like
memo
cache,
maybe
or
it
can
be
in
it
can
be
another
transaction
which
will
be
represented
like
transaction
id,
or
it
can
be
url,
which
is
possible
not
very
good
but
yeah.
It
can
point
to
some
warrior
resource
and
the
best
one
is
like
it
can
be.
Some
ipfs
hash.
C
Yeah
it
it
can
be.
I
also
added
here
like
bitcoin
file
protocol,
but
it's
not
implemented
still,
but
it's
possible
option
right
and
the
last
part
is
the
the
final.
Like
the
real
data
need
to
point
to
this
resource.
It
will
be
different
for
every
source
for
ipfs.
It
will
be
the
hash
for
url.
It
will
be
the
warrior
itself
for
the
transaction
type,
it
will
be
transaction
id,
and
here
is
some
example.
Transaction
like
op
return,
this
one
okay.
A
I'm
curious
what
what
was
your
thinking
there
with
the
with
using
locati
locat
ids
versus
like
the
memo
dot
cash
ids.
C
I
wanted
to
be
a
separate
protocol
because
this
one
can
be
used
by
itself
not
connected
to
nft.
Even
at
all,
it's
pointers
to
data
you
can
just
how
to
see
safe
on
the
blockchain
pointers
to
what
you
want.
We
was
talking
about
the
pointers
to
sip
this
sip
call.
So
when
you
you
can
get
this
and
make
a
phone
call
to
somebody
something
like
this
one.
C
C
You
can
include
it
in
your
browser
or
you
can
just
install
it.
It
have
like
some
convenient
method
like
you
can
create
this
op
returns
with
any
type
you
like
in
any
source,
or
you
can
use
some
wrappers
around
this
one
to
be
even
more
easier
like
if
you
want
to
create
a
pointer
to
to
audio
file.
You
just
create
audio
you
put
here.
Where
is
this
ipfs,
for
example?
A
C
So
the
next
step,
and
when
you
generate
this
kind
of
op
returns
inside
the
nfts,
you
just
put
the
transaction
id
of
this
guy
on
the
bsp.
C
C
A
A
C
C
If
you
go
there,
you
can
see
its
usual
nft
child,
which
is
originating
from
some
group
and
yeah.
This
one
is
the
ticker
so
from
here
I
figured
that
it's
an
audio,
it's
optional
step,
but
it's
very
convenient
and
the
magic
is
here.
The
document
url
now
is
pointing
to
something
which
is
a
transaction
on
the
blockchain
with
this
bcp.
C
You
see
this
transaction,
it's
just
one
op
return,
and
if
you
see
this
op
return,
you
can
see
it's
not
this
low
cut
and
it's
like
audio
type
and
it's
ipfs
type,
and
because
of
this
you
can
get
the
ipfs
cache.
C
C
A
I,
like
that
you
used
low
cat
id
I
haven't
played
around.
I
think
the
main
advantage
to
doing
that
is
that
bitdb
can
index
low
cat
ids,
it's
already
built
for
that.
So
if
you
want
to
build
an
indexer
to
track
these
types
of
transactions
on
the
blockchain,
that
would
probably
be
the
lowest
hanging
fruit,
yeah.
C
A
Well,
that's
a
really
good
point:
stoin
yeah,
because
yeah
when
you're
talking
about
so
this
is
very
similar
to
yeah
there.
It
is
there's
the
media
raindrops
yeah.
This
is
interesting
because,
where
yeah,
where
you
really
need
the
indexing
is,
is
a
marketplace
like
an
order
book,
but
that's
not
this.
This
is
just
a
payload
for
an
nft,
so
that's
an
interesting
thought
and
then
there's
something
else.
I
thought
was
really
interesting
that
you
said
that
is
escaping
me
at
the
moment.
C
C
With
this
thing,
I
can
have
now
several
like
nfts,
pointing
to
the
same
context
like
in
case
of
the
like
this
game
stuff.
You
can
have
five,
for
example,
tokens
pointing
to
the
same
context.
You
just
have
the
same
warriors
inside
it's
interesting.
B
C
Yeah,
it's
like
adding
this
middle
level
of
bcps
will
increase
a
lot
of
nft
usage.
I
think.
A
Yeah
yeah,
and
also
like
you,
could
extend
this
protocol
to
point
to
mutable
data.
I've
got
another
spec,
that's
similar
to
this
in
the
in
the
psf
specifications
repo.
So
if
that
transaction
id,
if
instead
pointing
to
a
transaction
with
an
op
return,
if
instead
that
operation
pointed
back
to
an
address,
then
a
wall,
and
that
this
is
essentially
what
that
immutable
data
pointer,
spec
is
all
about
is
in
then
a
wallet
can
look
at
the
transaction
history
of
that
address
and
and
that
can
change
over
time.
A
That's
mutable
get
the
get
the
latest
pointer,
which
is
the
latest
transaction
at
that
address.
So
that's
how
that's
how
in
this
spec
you
you
can
take
a
an
immutable
token
and
point
it
to
mutable
data.
So,
like
a
video
game
character
whose
stats
change
over
time,
you
could
represent
that
character
as
an
nft,
but
the
state
of
that
character
can
change
over
time.
C
Maybe
it
can
point
to
another
stuff
or
maybe
what
I
can
add,
the
the
address
type
like
pointing
to
address
directly.
A
Yeah,
that
would
be
a
great
yeah.
That
would
be
a
great
addition,
because
that
that
would
open
the
door
to
this
whole
mutable
data
thing
yeah,
so
yeah,
it's
very
easy.
It's
just.
The
parser
is
like
pretty
easy
to
be
extended.
Yeah.
A
C
B
C
Both
way
like
from
from
javascript
object
to
op
return
data
and
from
op
return
data
back
to
the
stuff,
so
you
can
get
from
the
blockchain.
This
op
return
parse
it.
It
will
give
you
the
object.
So
you
can.
A
Very
cool
man
wow
very
cool.
This
is
great.
Like
you
just
blew
my
mind,
I'm
like
trying
to
think
of
like
all
the
different
ways
we
could
use
this
library
there's
a
lot
of
them,
wow
cool
cool.
I
can't
wait
to
play
with
this
library.
This
is
really
interesting
and,
like
the
whole,
like
idea
that,
like
you,
don't
need
an
indexer,
that's
kind
of
blowing
my
mind.
A
Yeah,
well
I
mean
you're
you're
on
the
forefront
and
everybody's
kind
of
figuring
it
out
right
now.
So
that's
I!
Hopefully
our
work
can
converge
here
soon.
Once
we
get
the
utxo
get
call
implemented
into
minimal
slp
wallet,
that'll,
let
wallet.fullstack.cache
that'll
that'll.
Let
us
start
building
a
plug-in
for
for
nfts
and
for
different
types
of
use.
Cases
around
nfts,
because
they'll
be
able
to
just
tap
right
into
the
that
those
categorized
utxos.
A
And
then
yeah,
and
then
this
this.
This
is
really
interesting
like
that
that
mutable
that
mutable,
pointing
to
mutable
data
spec,
a
lot
of
businesses
have
been
interested
in
that,
but
not
so
much
that
they've
wanted
to
fund.
You
know
development
of
it,
and
so
if
we
build
a
some
nft
plugins
that
make
use
of
this
bcp
library
yeah
I
mean.
A
Then
then
that
opens
several
doors
like
it
opens,
like
you
know
a
generic
nft
use
case,
but
then
this
whole
mutable
data
thing
and
then
the
fact
that
you
support
different
media
types
and
different
file
formats
makes
it
really
flexible.
C
A
A
Together
right
on
okay,
well,
I
think
we
can
probably
wrap
it
up
with
that
joey.
You
got
anything,
no
okay,
cool
all
right!
Well,
yeah
I'll,
see
you
guys
in
the
permissionless
software
foundation,
telegram
chat,
room
yeah,
it's
diane!
I
can't
wait
to
play
with
your
software,
and
the
ts
will
have
a
com
com
meeting
at
this
time
next
week
and
then
I'm
probably
going
to
postpone
the
the
technical
steering
committee
meeting
in
two
weeks
from
now
I'll
have
a
medical
appointment.