├── .gitignore
├── README.md
├── images
├── Avail Arch.excalidraw
├── Avail Arch.svg
├── Light Client P2P Network.jpg
└── Nomad Avail Message Flow.svg
└── reference document
├── ACM-Reference-Format.bst
├── Avail Reference Paper v2 17 Sept 2024.pdf
├── Avail Reference Paper v2.1 6 Nov 2024.pdf
├── DA-KC-Data.drawio
├── DA-KC-Data.png
├── DA_references.bib
├── Data Availability - Reference Document.pdf
├── Data Availability - Reference Document.tex
├── README.md
└── acmart.cls
/.gitignore:
--------------------------------------------------------------------------------
1 | reference document/Data Availability - Reference Document.log
2 | reference document/Data Availability - Reference Document.synctex.gz
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
Avail
3 | Documentation & Links for the Avail blockchain
4 |
5 |
6 |
7 |
8 | Avail is a Web3 infrastructure layer that allows modular execution layers to scale and interoperate in a trust minimized way. Below, you can find a list of some of the relevant GitHub repositories.
9 |
10 | | Name (with link) | Description |
11 | |:----------------------:|:---------------------------------------------------------------------------------------:|
12 | | [Reference Document](https://github.com/availproject/data-availability/blob/93c547ce4efce3e992b573179a8d22b3657fdcee/reference%20document/Avail%20Reference%20Paper%20v2.1%206%20Nov%202024.pdf) | Document containing the overall rationale, design decisions and theoretical backgrounds |
13 | | [Avail Node](https://github.com/availproject/avail) | Avail node implementation repo. Built using Substrate. |
14 | | [Light Client](https://github.com/availproject/avail-light) | Light client designed to check data availability proofs on Avail. |
15 | | [Explorer](https://github.com/availproject/avail-apps) | Avail explorer implementation repo. Built using Polkadot apps. |
16 | | [Bridge UI](https://github.com/availproject/bridge-ui) | Repository for the official Avail <-> ETH bridge UI |
17 | | [Documentation](https://availproject.github.io/) | Avail documentation hub. |
18 | | [Tests](https://github.com/availproject/avail-test) | End to end tests for Avail. |
19 |
20 | Suggestions and feedback welcome.
21 |
22 | ## Avail Architecture
23 |
24 | There are two main components in the Avail network:
25 |
26 | - [Avail Node](https://github.com/availproject/avail): This forms the blockchain layer of Avail. It is built using Substrate, with modifications to specialize it for data availability. Apart from basic blockchain operations like balance transfer, validator staking, slashing and governance, it also contains methods for applications to submit data blobs. This network is secured by the GRANDPA+BABE consensus engine, under the assumption that at least 2/3 of the validator set is honest.
27 | - [Avail Light Client](https://github.com/availproject/avail-light): The light clients (LC) form an overlay P2P network. Individually, all LCs subscribe to (finalized) headers of the chain. It performs Data Availability Sampling (DAS) to gain high confidence of DA. The LCs also host the sampled data on the P2P so that together the P2P network can have the entire data in a highly available manner.
28 |
29 | 
30 |
31 | ## Bridge between Avail and Ethereum using VectorX
32 |
33 | The Avail team has partnered with [Succinct labs](https://succinct.xyz/) to develop a trust-minimized bridge between Avail DA and Ethereum. VectorX enables efficient and trust-minimized bridging of arbitrary messages between Avail DA and Ethereum, which enables use cases like token bridging. You can use the [bridge](https://docs.availproject.org/docs/end-user-guide/vectorx) through the [official UI](bridge.availproject.org).
34 |
35 |
--------------------------------------------------------------------------------
/images/Avail Arch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/Light Client P2P Network.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/availproject/data-availability/1fa5e8b1260344b137b17a3dfa1e493a14b5888a/images/Light Client P2P Network.jpg
--------------------------------------------------------------------------------
/reference document/ACM-Reference-Format.bst:
--------------------------------------------------------------------------------
1 | %%% -*-BibTeX-*-
2 | %%% ====================================================================
3 | %%% @BibTeX-style-file{
4 | %%% author = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
5 | %%% version = "2.1",
6 | %%% date = "14 June 2017",
7 | %%% filename = "ACM-Reference-Format.bst",
8 | %%% email = "borisv@lk.net, boris@varphi.com",
9 | %%% codetable = "ISO/ASCII",
10 | %%% keywords = "ACM Transactions bibliography style; BibTeX",
11 | %%% license = "public domain",
12 | %%% supported = "yes",
13 | %%% abstract = "",
14 | %%% }
15 | %%% ====================================================================
16 |
17 | %%% Revision history: see source in git
18 |
19 | ENTRY
20 | { address
21 | advisor
22 | archiveprefix
23 | author
24 | booktitle
25 | chapter
26 | city
27 | date
28 | edition
29 | editor
30 | eprint
31 | eprinttype
32 | eprintclass
33 | howpublished
34 | institution
35 | journal
36 | key
37 | location
38 | month
39 | note
40 | number
41 | organization
42 | pages
43 | primaryclass
44 | publisher
45 | school
46 | series
47 | title
48 | type
49 | volume
50 | year
51 | % New keys recognized
52 | issue % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
53 | articleno
54 | eid
55 | day % UTAH: needed for newspapers, weeklies, bi-weeklies
56 | doi % UTAH
57 | url % UTAH
58 | bookpages % UTAH
59 | numpages
60 | lastaccessed % UTAH: used only for @Misc{...}
61 | coden % UTAH
62 | isbn % UTAH
63 | isbn-13 % UTAH
64 | issn % UTAH
65 | lccn % UTAH
66 | }
67 | {}
68 | { label.year extra.label sort.year sort.label basic.label.year}
69 |
70 | INTEGERS { output.state before.all mid.sentence after.sentence after.block }
71 |
72 | INTEGERS { show-isbn-10-and-13 } % initialized below in begin.bib
73 |
74 | INTEGERS { nameptr namesleft numnames }
75 |
76 | INTEGERS { multiresult }
77 |
78 | INTEGERS { len }
79 |
80 | INTEGERS { last.extra.num }
81 |
82 | STRINGS { s t t.org u }
83 |
84 | STRINGS { last.label next.extra }
85 |
86 | STRINGS { p1 p2 p3 page.count }
87 |
88 |
89 | FUNCTION { not }
90 | {
91 | { #0 }
92 | { #1 }
93 | if$
94 | }
95 |
96 | FUNCTION { and }
97 | {
98 | 'skip$
99 | { pop$ #0 }
100 | if$
101 | }
102 |
103 | FUNCTION { or }
104 | {
105 | { pop$ #1 }
106 | 'skip$
107 | if$
108 | }
109 |
110 |
111 | FUNCTION { dump.stack.1 }
112 | {
113 | duplicate$ "STACK[top] = [" swap$ * "]" * warning$
114 | }
115 |
116 | FUNCTION { dump.stack.2 }
117 | {
118 | duplicate$ "STACK[top ] = [" swap$ * "]" * warning$
119 | swap$
120 | duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
121 | swap$
122 | }
123 |
124 | FUNCTION { empty.or.unknown }
125 | {
126 | %% Examine the top stack entry, and push 1 if it is empty, or
127 | %% consists only of whitespace, or is a string beginning with two
128 | %% queries (??), and otherwise, push 0.
129 | %%
130 | %% This function provides a replacement for empty$, with the
131 | %% convenient feature that unknown values marked by two leading
132 | %% queries are treated the same as missing values, and thus, do not
133 | %% appear in the output .bbl file, and yet, their presence in .bib
134 | %% file(s) serves to mark values which are temporarily missing, but
135 | %% are expected to be filled in eventually once more data is
136 | %% obtained. The TeX User Group and BibNet bibliography archives
137 | %% make extensive use of this practice.
138 | %%
139 | %% An empty string cannot serve the same purpose, because just as in
140 | %% statistics data processing, an unknown value is not the same as an
141 | %% empty value.
142 | %%
143 | %% At entry: stack = ... top:[string]
144 | %% At exit: stack = ... top:[0 or 1]
145 |
146 | duplicate$ empty$
147 | { pop$ #1 }
148 | { #1 #2 substring$ "??" = }
149 | if$
150 | }
151 |
152 | FUNCTION { writeln }
153 | {
154 | %% In BibTeX style files, the sequences
155 | %%
156 | %% ... "one" "two" output
157 | %% ... "one" "two" output.xxx
158 | %%
159 | %% ship "one" to the output file, possibly following by punctuation,
160 | %% leaving the stack with
161 | %%
162 | %% ... "two"
163 | %%
164 | %% There is thus a one-string lag in output processing that must be
165 | %% carefully handled to avoid duplicating a string in the output
166 | %% file. Unless otherwise noted, all output.xxx functions leave
167 | %% just one new string on the stack, and that model should be born
168 | %% in mind when reading or writing function code.
169 | %%
170 | %% BibTeX's asynchronous buffering of output from strings from the
171 | %% stack is confusing because newline$ bypasses the buffer. It
172 | %% would have been so much easier for newline to be a character
173 | %% rather than a state of the output-in-progress.
174 | %%
175 | %% The documentation in btxhak.dvi is WRONG: it says
176 | %%
177 | %% newline$ Writes onto the bbl file what's accumulated in the
178 | %% output buffer. It writes a blank line if and only
179 | %% if the output buffer is empty. Since write$ does
180 | %% reasonable line breaking, you should use this
181 | %% function only when you want a blank line or an
182 | %% explicit line break.
183 | %%
184 | %% write$ Pops the top (string) literal and writes it on the
185 | %% output buffer (which will result in stuff being
186 | %% written onto the bbl file when the buffer fills
187 | %% up).
188 | %%
189 | %% Examination of the BibTeX source code shows that write$ does
190 | %% indeed behave as claimed, but newline$ sends a newline character
191 | %% directly to the output file, leaving the stack unchanged. The
192 | %% first line "Writes onto ... buffer." is therefore wrong.
193 | %%
194 | %% The original BibTeX style files almost always use "write$ newline$"
195 | %% in that order, so it makes sense to hide that pair in a private
196 | %% function like this one, named after a statement in Pascal,
197 | %% the programming language embedded in the BibTeX Web program.
198 |
199 | write$ % output top-of-stack string
200 | newline$ % immediate write of newline (not via stack)
201 | }
202 |
203 | FUNCTION { init.state.consts }
204 | {
205 | #0 'before.all :=
206 | #1 'mid.sentence :=
207 | #2 'after.sentence :=
208 | #3 'after.block :=
209 | }
210 |
211 | FUNCTION { output.nonnull }
212 | { % Stack in: ... R S T Stack out: ... R T File out: S
213 | 's :=
214 | output.state mid.sentence =
215 | {
216 | ", " * write$
217 | }
218 | {
219 | output.state after.block =
220 | {
221 | add.period$ writeln
222 | "\newblock " write$
223 | }
224 | {
225 | output.state before.all =
226 | {
227 | write$
228 | }
229 | {
230 | add.period$ " " * write$
231 | }
232 | if$
233 | }
234 | if$
235 | mid.sentence 'output.state :=
236 | }
237 | if$
238 | s
239 | }
240 |
241 | FUNCTION { output.nonnull.dot.space }
242 | { % Stack in: ... R S T Stack out: ... R T File out: S
243 | 's :=
244 | output.state mid.sentence = % { ". " * write$ }
245 | {
246 | ". " * write$
247 | }
248 | {
249 | output.state after.block =
250 | {
251 | add.period$ writeln "\newblock " write$
252 | }
253 | {
254 | output.state before.all =
255 | {
256 | write$
257 | }
258 | {
259 | add.period$ " " * write$
260 | }
261 | if$
262 | }
263 | if$
264 | mid.sentence 'output.state :=
265 | }
266 | if$
267 | s
268 | }
269 |
270 | FUNCTION { output.nonnull.remove }
271 | { % Stack in: ... R S T Stack out: ... R T File out: S
272 | 's :=
273 | output.state mid.sentence =
274 | {
275 | " " * write$
276 | }
277 | {
278 | output.state after.block =
279 | {
280 | add.period$ writeln "\newblock " write$
281 | }
282 | {
283 | output.state before.all =
284 | {
285 | write$
286 | }
287 | {
288 | add.period$ " " * write$
289 | }
290 | if$
291 | }
292 | if$
293 | mid.sentence 'output.state :=
294 | }
295 | if$
296 | s
297 | }
298 |
299 | FUNCTION { output.nonnull.removenospace }
300 | { % Stack in: ... R S T Stack out: ... R T File out: S
301 | 's :=
302 | output.state mid.sentence =
303 | {
304 | "" * write$
305 | }
306 | {
307 | output.state after.block =
308 | {
309 | add.period$ writeln "\newblock " write$
310 | }
311 | {
312 | output.state before.all =
313 | {
314 | write$
315 | }
316 | {
317 | add.period$ " " * write$
318 | }
319 | if$
320 | }
321 | if$
322 | mid.sentence 'output.state :=
323 | }
324 | if$
325 | s
326 | }
327 |
328 | FUNCTION { output }
329 | { % discard top token if empty, else like output.nonnull
330 | duplicate$ empty.or.unknown
331 | 'pop$
332 | 'output.nonnull
333 | if$
334 | }
335 |
336 | FUNCTION { output.dot.space }
337 | { % discard top token if empty, else like output.nonnull.dot.space
338 | duplicate$ empty.or.unknown
339 | 'pop$
340 | 'output.nonnull.dot.space
341 | if$
342 | }
343 |
344 | FUNCTION { output.removenospace }
345 | { % discard top token if empty, else like output.nonnull.removenospace
346 | duplicate$ empty.or.unknown
347 | 'pop$
348 | 'output.nonnull.removenospace
349 | if$
350 | }
351 |
352 | FUNCTION { output.check }
353 | { % like output, but warn if key name on top-of-stack is not set
354 | 't :=
355 | duplicate$ empty.or.unknown
356 | { pop$ "empty " t * " in " * cite$ * warning$ }
357 | 'output.nonnull
358 | if$
359 | }
360 |
361 | FUNCTION { bibinfo.output.check }
362 | { % like output.check, adding bibinfo field
363 | 't :=
364 | duplicate$ empty.or.unknown
365 | { pop$ "empty " t * " in " * cite$ * warning$ }
366 | { "\bibinfo{" t "}{" * * swap$ * "}" *
367 | output.nonnull }
368 | if$
369 | }
370 |
371 | FUNCTION { output.check.dot.space }
372 | { % like output.dot.space, but warn if key name on top-of-stack is not set
373 | 't :=
374 | duplicate$ empty.or.unknown
375 | { pop$ "empty " t * " in " * cite$ * warning$ }
376 | 'output.nonnull.dot.space
377 | if$
378 | }
379 |
380 | FUNCTION { fin.block }
381 | { % functionally, but not logically, identical to fin.entry
382 | add.period$
383 | writeln
384 | }
385 |
386 | FUNCTION { fin.entry }
387 | {
388 | add.period$
389 | writeln
390 | }
391 |
392 | FUNCTION { new.sentence }
393 | { % update sentence state, with neither output nor stack change
394 | output.state after.block =
395 | 'skip$
396 | {
397 | output.state before.all =
398 | 'skip$
399 | { after.sentence 'output.state := }
400 | if$
401 | }
402 | if$
403 | }
404 |
405 | FUNCTION { fin.sentence }
406 | {
407 | add.period$
408 | write$
409 | new.sentence
410 | ""
411 | }
412 |
413 | FUNCTION { new.block }
414 | {
415 | output.state before.all =
416 | 'skip$
417 | { after.block 'output.state := }
418 | if$
419 | }
420 |
421 | FUNCTION { output.coden } % UTAH
422 | { % output non-empty CODEN as one-line sentence (stack untouched)
423 | coden empty.or.unknown
424 | { }
425 | { "\showCODEN{" coden * "}" * writeln }
426 | if$
427 | }
428 |
429 | %
430 | % Sometimes articleno starts with the word 'Article' or 'Paper.
431 | % (this is a bug of acmdl, sigh)
432 | % We strip them. We assume eid or articleno is already on stack
433 | %
434 |
435 | FUNCTION { strip.articleno.or.eid }
436 | {
437 | 't :=
438 | t #1 #7 substring$ "Article" =
439 | {t #8 t text.length$ substring$ 't :=}
440 | { }
441 | if$
442 | t #1 #7 substring$ "article" =
443 | {t #8 t text.length$ substring$ 't :=}
444 | { }
445 | if$
446 | t #1 #5 substring$ "Paper" =
447 | {t #6 t text.length$ substring$ 't :=}
448 | { }
449 | if$
450 | t #1 #5 substring$ "paper" =
451 | {t #6 t text.length$ substring$ 't :=}
452 | { }
453 | if$
454 | % Strip any left trailing space or ~
455 | t #1 #1 substring$ " " =
456 | {t #2 t text.length$ substring$ 't :=}
457 | { }
458 | if$
459 | t #1 #1 substring$ "~" =
460 | {t #2 t text.length$ substring$ 't :=}
461 | { }
462 | if$
463 | t
464 | }
465 |
466 |
467 | FUNCTION { format.articleno }
468 | {
469 | articleno empty.or.unknown not eid empty.or.unknown not and
470 | { "Both articleno and eid are defined for " cite$ * warning$ }
471 | 'skip$
472 | if$
473 | articleno empty.or.unknown eid empty.or.unknown and
474 | { "" }
475 | {
476 | numpages empty.or.unknown
477 | { "articleno or eid field, but no numpages field, in "
478 | cite$ * warning$ }
479 | { }
480 | if$
481 | eid empty.or.unknown
482 | { "Article \bibinfo{articleno}{" articleno strip.articleno.or.eid * "}" * }
483 | { "Article \bibinfo{articleno}{" eid strip.articleno.or.eid * "}" * }
484 | if$
485 | }
486 | if$
487 | }
488 |
489 | FUNCTION { format.year }
490 | { % push year string or "[n.\,d.]" onto output stack
491 | %% Because year is a mandatory field, we always force SOMETHING
492 | %% to be output
493 | "\bibinfo{year}{"
494 | year empty.or.unknown
495 | { "[n.\,d.]" }
496 | { year }
497 | if$
498 | * "}" *
499 | }
500 |
501 | FUNCTION { format.day.month }
502 | { % push "day month " or "month " or "" onto output stack
503 | day empty.or.unknown
504 | {
505 | month empty.or.unknown
506 | { "" }
507 | { "\bibinfo{date}{" month * "} " *}
508 | if$
509 | }
510 | {
511 | month empty.or.unknown
512 | { "" }
513 | { "\bibinfo{date}{" day * " " * month * "} " *}
514 | if$
515 | }
516 | if$
517 | }
518 |
519 | FUNCTION { format.day.month.year } % UTAH
520 | { % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
521 | % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
522 | % acm-*.bst addition: prefix parenthesized date string with
523 | % ", Article nnn "
524 | articleno empty.or.unknown eid empty.or.unknown and
525 | { "" }
526 | { output.state after.block =
527 | {", " format.articleno * }
528 | { format.articleno }
529 | if$
530 | }
531 | if$
532 | " (" * format.day.month * format.year * ")" *
533 | }
534 |
535 | FUNCTION { output.day.month.year } % UTAH
536 | { % if month is empty value, do nothing; else output stack top and
537 | % leave with new top string "(MON.)" or "(DD MON.)"
538 | % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
539 | format.day.month.year
540 | output.nonnull.remove
541 | }
542 |
543 | FUNCTION { strip.doi } % UTAH
544 | { % Strip any Web address prefix to recover the bare DOI, leaving the
545 | % result on the output stack, as recommended by CrossRef DOI
546 | % documentation.
547 | % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
548 | % "10.1145/1534530.1534545". A suitable URL is later typeset and
549 | % displayed as the LAST item in the reference list entry. Publisher Web
550 | % sites wrap this with a suitable link to a real URL to resolve the DOI,
551 | % and the master https://doi.org/ address is preferred, since publisher-
552 | % specific URLs can disappear in response to economic events. All
553 | % journals are encouraged by the DOI authorities to use that typeset
554 | % format and link procedures for uniformity across all publications that
555 | % include DOIs in reference lists.
556 | % The numeric prefix is guaranteed to start with "10.", so we use
557 | % that as a test.
558 | % 2017-02-04 Added stripping of https:// (Boris)
559 | doi #1 #3 substring$ "10." =
560 | { doi }
561 | {
562 | doi 't := % get modifiable copy of DOI
563 |
564 | % Change https:// to http:// to strip both prefixes (BV)
565 |
566 | t #1 #8 substring$ "https://" =
567 | { "http://" t #9 t text.length$ #8 - substring$ * 't := }
568 | { }
569 | if$
570 |
571 | t #1 #7 substring$ "http://" =
572 | {
573 | t #8 t text.length$ #7 - substring$ 't :=
574 |
575 | "INTERNAL STYLE-FILE ERROR" 's :=
576 |
577 | % search for next "/" and assign its suffix to s
578 |
579 | { t text.length$ }
580 | {
581 | t #1 #1 substring$ "/" =
582 | {
583 | % save rest of string as true DOI (should be 10.xxxx/yyyy)
584 | t #2 t text.length$ #1 - substring$ 's :=
585 | "" 't := % empty string t terminates the loop
586 | }
587 | {
588 | % discard first character and continue loop: t <= substring(t,2,last)
589 | t #2 t text.length$ #1 - substring$ 't :=
590 | }
591 | if$
592 | }
593 | while$
594 |
595 | % check for valid DOI (should be 10.xxxx/yyyy)
596 | s #1 #3 substring$ "10." =
597 | { }
598 | { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
599 | if$
600 |
601 | s % push the stripped DOI on the output stack
602 |
603 | }
604 | {
605 | "unrecognized DOI value [" doi * "]" * warning$
606 | doi % push the unrecognized original DOI on the output stack
607 | }
608 | if$
609 | }
610 | if$
611 | }
612 |
613 | %
614 | % Change by BV: added standard prefix to URL
615 | %
616 | FUNCTION { output.doi } % UTAH
617 | { % output non-empty DOI as one-line sentence (stack untouched)
618 | doi empty.or.unknown
619 | { }
620 | {
621 | %% Use \urldef here for the same reason it is used in output.url,
622 | %% see output.url for further discussion.
623 | "\urldef\tempurl%" writeln
624 | "\url{https://doi.org/" strip.doi * "}" * writeln
625 | "\showDOI{\tempurl}" writeln
626 | }
627 | if$
628 | }
629 |
630 | FUNCTION { output.isbn } % UTAH
631 | { % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
632 | show-isbn-10-and-13
633 | {
634 | %% show both 10- and 13-digit ISBNs
635 | isbn empty.or.unknown
636 | { }
637 | {
638 | "\showISBNx{" isbn * "}" * writeln
639 | }
640 | if$
641 | isbn-13 empty.or.unknown
642 | { }
643 | {
644 | "\showISBNxiii{" isbn-13 * "}" * writeln
645 | }
646 | if$
647 | }
648 | {
649 | %% show 10-digit ISBNs only if 13-digit ISBNs not available
650 | isbn-13 empty.or.unknown
651 | {
652 | isbn empty.or.unknown
653 | { }
654 | {
655 | "\showISBNx{" isbn * "}" * writeln
656 | }
657 | if$
658 | }
659 | {
660 | "\showISBNxiii{" isbn-13 * "}" * writeln
661 | }
662 | if$
663 | }
664 | if$
665 | }
666 |
667 | FUNCTION { output.issn } % UTAH
668 | { % output non-empty ISSN as one-line sentence (stack untouched)
669 | issn empty.or.unknown
670 | { }
671 | { "\showISSN{" issn * "}" * writeln }
672 | if$
673 | }
674 |
675 | FUNCTION { output.issue }
676 | { % output non-empty issue number as a one-line sentence (stack untouched)
677 | issue empty.or.unknown
678 | { }
679 | { "Issue " issue * "." * writeln }
680 | if$
681 | }
682 |
683 | FUNCTION { output.lccn } % UTAH
684 | { % return with stack untouched
685 | lccn empty.or.unknown
686 | { }
687 | { "\showLCCN{" lccn * "}" * writeln }
688 | if$
689 | }
690 |
691 | FUNCTION { output.note } % UTAH
692 | { % return with stack empty
693 | note empty.or.unknown
694 | { }
695 | { "\shownote{" note add.period$ * "}" * writeln }
696 | if$
697 | }
698 |
699 | FUNCTION { output.note.check } % UTAH
700 | { % return with stack empty
701 | note empty.or.unknown
702 | { "empty note in " cite$ * warning$ }
703 | { "\shownote{" note add.period$ * "}" * writeln }
704 | if$
705 | }
706 |
707 | FUNCTION { output.eprint } %
708 | { % return with stack empty
709 | eprint empty.or.unknown
710 | { }
711 | { "\showeprint"
712 | archiveprefix empty.or.unknown
713 | { eprinttype empty.or.unknown
714 | { }
715 | { "[" eprinttype "]" * * * }
716 | if$
717 | }
718 | { "[" archiveprefix "l" change.case$ "]" * * * }
719 | if$
720 | "{" eprint "}" * * *
721 | primaryclass empty.or.unknown
722 | { eprintclass empty.or.unknown
723 | { }
724 | { "~[" eprintclass "]" * * * }
725 | if$
726 | }
727 | { "~[" primaryclass "]" * * * }
728 | if$
729 | writeln
730 | }
731 | if$
732 | }
733 |
734 |
735 | %
736 | % Changes by BV 2011/04/15. Do not output
737 | % url if doi is defined
738 | %
739 | FUNCTION { output.url } % UTAH
740 | { % return with stack untouched
741 | % output URL and associated lastaccessed fields
742 | doi empty.or.unknown
743 | {
744 | url empty.or.unknown
745 | { }
746 | {
747 | %% Use \urldef, outside \showURL, so that %nn, #, etc in URLs work
748 | %% correctly. Put the actual URL on its own line to reduce the
749 | %% likelihood of BibTeX's nasty line wrapping after column 79.
750 | %% \url{} can undo this, but if that doesn't work for some reason
751 | %% the .bbl file would have to be repaired manually.
752 | "\urldef\tempurl%" writeln
753 | "\url{" url * "}" * writeln
754 |
755 | "\showURL{%" writeln
756 | lastaccessed empty.or.unknown
757 | { "" }
758 | { "Retrieved " lastaccessed * " from " * }
759 | if$
760 | "\tempurl}" * writeln
761 | }
762 | if$
763 | }
764 | { }
765 | if$
766 | }
767 |
768 | FUNCTION { output.year.check }
769 | { % warn if year empty, output top string and leave " YEAR